2012-01-17 5 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(); 

と呼ばれたら、あなたは、データセット内の「社員」テーブルにアクセスしようとしているが、あなたはそれを伝えるまで、データセットは(da.Fill()を呼び出すことによって)についてEmployee表を知りません。

IMO DataRow dRow = dsl.Tables["Employee"].NewRow();に電話する方法はありません。

+0

SQLインサートを使用する必要がある場合、プリセットデータを追加するのではなく、メソッドのパラメータを受け入れるためのステートメントをどのようにしますか。 – Dumingu

+0

http://msdn.microsoft.com/en-us/library/yy6y35y8.aspxコマンドテキストには、プロシージャまたはSQL文を格納できます。 SQL文の場合、すべてのパラメータはSQL文で@で定義する必要があります。 var SQL = "update myTable Set myColumn = @columevalue"。これで、@columevalueを持つコマンドオブジェクトにsqlパラメータを追加する必要があります。 – Mahesh

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

まず、データセットを入力する必要があります。

テストされていないが、試してみる価値

CommandType.TableDirectを選ぶ

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

は全体のSQL文を使用せずにあなたの全体の表を持参してください。

+0

以前と同じエラーです。 – Dumingu

+0

デバッグし、 'dsl.Tables.Count'の値を確認してください - そこには何がありますか? –

関連する問題