2012-01-17 197 views
1

我试图使用方法更新数据库,将使用该方法的参数,而不是使用SQL语句。我这样做是为了让用户可以在数据库中输入信息。在.net中更新数据库方法

System.Data.OleDb.OleDbConnection con; 
DataSet dsl; 
System.Data.OleDb.OleDbDataAdapter da; 

public String updateDatabase(int id, String Fname, String Lname, int age, string job) 
{ 
    con = new System.Data.OleDb.OleDbConnection(); 
    con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Owner\\Documents\\CIS3052.mdb"; 
    dsl = new DataSet(); 

    da = new System.Data.OleDb.OleDbDataAdapter(); 

    con.Open(); 

    DataRow dRow = dsl.Tables["Employee"].NewRow(); 
    dRow["ID"] = id; 
    dRow["Fname"] = Fname; 
    dRow["Lname"] = Lname; 
    dRow["Age"] = age; 
    dRow["Job"] = job; 
    dsl.Tables["Employee"].Rows.Add(dRow); 

    da.Update(dsl, "Employee"); 
    return null; 
} 

我的问题是,在这条线:

DataRow dRow = dsl.Tables["Employee"].NewRow(); 

它告诉我:

对象引用不设置到对象的实例。

我试过使用da.Fill(),但我找不到一种方式来使用它,而不使用SQL语句。

谢谢。

回答

1

因为dsl.Tables["Employee"]剂量不存在。一旦你填写dsl.Tables["Employee"]da.Fill()然后它变得可用。

一旦你叫

DataRow dRow = dsl.Tables["Employee"].NewRow(); 

您试图访问数据集的“雇员”表,但数据集不知道Employee表,直到你告诉它(通过调用da.Fill())。

海事组织没有办法调用DataRow dRow = dsl.Tables["Employee"].NewRow();而不填充它。

+0

所以,如果我必须使用SQL插入,我将如何做声明来接受方法的参数,而不必添加预置数据。 – Dumingu 2012-01-17 12:24:17

+0

http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx命令文本可以是存储过程或sql语句。在sql语句的情况下,所有的参数必须在sql语句中用@定义。 var SQL =“更新myTable设置myColumn = @columevalue”。现在,您需要使用@columevalue在命令对象中添加一个sql参数。 – Mahesh 2012-01-17 12:40:13

1

这是因为你的数据集中没有任何东西。在那里检查你的代码。

0

这是因为在数据集中没有任何名为Employee的表。这对于更新数据库中的记录非常复杂。您可以尝试使用SQLCommand类

string sql= "Build you query"; 
    using (SqlConnection connection = new SqlConnection(
       "your connectionstring")) 
    { 
     SqlCommand command = new SqlCommand(
      sql, connection); 
     connection.Open(); 


     command.ExecuteNonQuery(); 

     reader.Close(); 

    } 
0

您必须先填充数据集。

未经检验的,但值得一试:

con.Open(); 
da = new System.Data.OleDb.OleDbDataAdapter(); 
da.SelectCommand = new OleDbCommand("Employee", con); 
da.SelectCommand.CommandType = CommandType.TableDirect; 
da.Fill(dsl); 

选择CommandType.TableDirect应该把你整个表,而不使用整个SQL语句。

+0

与以前相同的错误。 – Dumingu 2012-01-17 12:21:58

+0

调试并查看“dsl.Tables.Count”的值 - 您有什么? – 2012-01-17 12:31:02