0

これは、SQLServerを使用してVBでDataAdapterとDataSetを使用してテーブルを更新する方法です。

sqlStmt = String.Format("INSERT INTO my_table (name, lastname) VALUES ('John', 'Doe')")
ds = New DataSet
da = New SqlDataAdapter(sqlStmt, My.Settings.ConnectionString)
da.Fill(ds)

INSERTステートメントの場合はFillメソッドが意味をなさないことは知っていますが、私はこのテクノロジーに不慣れであり、上記のステートメントが問題なくテーブルを更新します。私の質問はこれです:エラー(重複キーエラーなど)があった場合、アプリケーションでこれをどのように知ることができますか?上記のコードをtry/catchブロックに入れる必要がありますか?

また、Fillメソッドを使用しないDataAdapter / DataSetの組み合わせを使用してINSERTステートメントを実行するための「適切な」メソッドがある場合は、それも示してください。

4

1 に答える 1

2

更新ステートメントの場合は、SqlCommandオブジェクトを使用する必要があります。

SqlCommand cmd = new SqlCommand( "INSERT INTO my_table (name, lastname) VALUES ('John', 'Doe')", My.Settings.ConnectionString);

cmd.ExectureNonQuery();

ただし、SQLインジェクション攻撃の可能性を減らすためにユーザーからデータを取得する場合は、パラメーター化されたSQLクエリを使用することをお勧めします:)

SqlCommand cmd = new SqlCommand( "INSERT INTO my_table (name, lastname) VALUES (@FirstName, @LastName)", My.Settings.ConnectionString);

cmd.Parameters.Add("FirstName", SqlDbType.NVarChar);
cmd.Parameters.Add("LastName", SqlDbType.NVarChar);

cmd.Parameters[0].Value = txtFirstName.Text;
cmd.Parameters[1].Value = txtLastName.Text;

cmd.ExecuteNonQuery();

他の質問への回答:

はい。主キー違反があった場合、SQLExceptionがスローされます。try-catchブロックを使用してそれをキャッチし、メッセージを表示するか、適切なことを行うことができます。

try
{
  cmd.ExecuteNonQuery();
}
catch (Exception ex)
{      
  MessageBox.Show("Error! " + ex.Message);   
}
于 2010-07-08T18:19:13.723 に答える