2012-01-17 50 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