这是我使用SQL Server在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语句的“正确”方法,请同时指出。
非常感谢,
托德
答案 0 :(得分:2)
对于update语句,您应该使用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);
}