检查记录是否插入成功
Check if record inserted successfully
此处的代码将数据插入 SQL 服务器 table 并且工作正常,但我不知道该过程是否成功。此处的代码显示错误并且未按预期工作。如何使用 try 和 catch 检查数据是否插入。
代码
protected void btSave_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ToString());
try
{
string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
string contentType = FileUpload1.PostedFile.ContentType;
using (Stream fs = FileUpload1.PostedFile.InputStream)
{
using (BinaryReader br = new BinaryReader(fs))
{
byte[] bytes = br.ReadBytes((Int32)fs.Length);
string constr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
con.Open();
string query = "insert into events (comName,eventName, eventDis, eventDate, fName, contentType, Data) values (@comName,@eventName,@eventDis, @eventDate,@fName, @contentType, @Data)";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@comName", txtcname.Text);
cmd.Parameters.AddWithValue("@eventName", txtename.Text);
cmd.Parameters.AddWithValue("@eventDis", txteDis.Text);
cmd.Parameters.AddWithValue("@eventDate", txteDate.Text);
cmd.Parameters.AddWithValue("@fName", filename);
cmd.Parameters.AddWithValue("@ContentType", contentType);
cmd.Parameters.AddWithValue("@Data", bytes);
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
catch (SqlException ex)
{
return"Data not inserted !" + ex;
}
}
如 MSDN 所述:
对于 UPDATE、INSERT 和 DELETE 语句,return 值是受命令影响的行数。当正在插入或更新的 table 上存在触发器时,return 值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,return 值为 -1。如果发生回滚,return 值也为 -1。
int a = cmd.ExecuteNonQuery();
if (a > 0) {
//at least one record has been affected
}
嗯,你的方法定义为void
,很明显,你不能return一个字符串:
return"Data not inserted !" + ex;
我不清楚你想在这里做什么。我建议完全删除 try-catch
。如果出现问题,就让异常传播。如果一切正常,则表示插入工作正常。
如果你真的很偏执,我想你可以按照另一个答案的建议去做,并检查 cmd.ExecuteNonQuery();
returns 1
。但是对于 insert
声明,我觉得那毫无意义。 我收回那句话。在这种情况下,检查受影响的行数确实毫无意义。如果 insert
由于某种原因失败,它不会 return -1
,它会抛出异常。
顺便说一句,考虑用 using
语句包装 SqlConnection con
对象的使用,就像你为 SqlCommand cmd
.
做的一样
编辑
假设这是某个 WinForms 应用程序,而您只想在插入是否有效时向用户提供一些视觉反馈,那么您可以尝试这样做:
try
{
// do your sql stuff here.
MessageBox.Show("Insert worked!");
}
catch(SqlException e)
{
MessageBox.Show("Data not inserted !" + e);
}
Algiri,正如 Juan 所说,您可能想向我们展示您的错误内容。 Sql 可能出于多种原因不允许您插入记录。
- 例如,@comName 可以设置为 50 个字符,而 sql table 的最大限制为 20 个字符。
你说:
"The code here inserts data into sql table and it works fine"
When does it work fine? When running the command in SQL?
此处的代码将数据插入 SQL 服务器 table 并且工作正常,但我不知道该过程是否成功。此处的代码显示错误并且未按预期工作。如何使用 try 和 catch 检查数据是否插入。
代码
protected void btSave_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ToString());
try
{
string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
string contentType = FileUpload1.PostedFile.ContentType;
using (Stream fs = FileUpload1.PostedFile.InputStream)
{
using (BinaryReader br = new BinaryReader(fs))
{
byte[] bytes = br.ReadBytes((Int32)fs.Length);
string constr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
con.Open();
string query = "insert into events (comName,eventName, eventDis, eventDate, fName, contentType, Data) values (@comName,@eventName,@eventDis, @eventDate,@fName, @contentType, @Data)";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@comName", txtcname.Text);
cmd.Parameters.AddWithValue("@eventName", txtename.Text);
cmd.Parameters.AddWithValue("@eventDis", txteDis.Text);
cmd.Parameters.AddWithValue("@eventDate", txteDate.Text);
cmd.Parameters.AddWithValue("@fName", filename);
cmd.Parameters.AddWithValue("@ContentType", contentType);
cmd.Parameters.AddWithValue("@Data", bytes);
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
catch (SqlException ex)
{
return"Data not inserted !" + ex;
}
}
如 MSDN 所述:
对于 UPDATE、INSERT 和 DELETE 语句,return 值是受命令影响的行数。当正在插入或更新的 table 上存在触发器时,return 值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,return 值为 -1。如果发生回滚,return 值也为 -1。
int a = cmd.ExecuteNonQuery();
if (a > 0) {
//at least one record has been affected
}
嗯,你的方法定义为void
,很明显,你不能return一个字符串:
return"Data not inserted !" + ex;
我不清楚你想在这里做什么。我建议完全删除 try-catch
。如果出现问题,就让异常传播。如果一切正常,则表示插入工作正常。
如果你真的很偏执,我想你可以按照另一个答案的建议去做,并检查 我收回那句话。在这种情况下,检查受影响的行数确实毫无意义。如果 cmd.ExecuteNonQuery();
returns 1
。但是对于 insert
声明,我觉得那毫无意义。insert
由于某种原因失败,它不会 return -1
,它会抛出异常。
顺便说一句,考虑用 using
语句包装 SqlConnection con
对象的使用,就像你为 SqlCommand cmd
.
编辑
假设这是某个 WinForms 应用程序,而您只想在插入是否有效时向用户提供一些视觉反馈,那么您可以尝试这样做:
try
{
// do your sql stuff here.
MessageBox.Show("Insert worked!");
}
catch(SqlException e)
{
MessageBox.Show("Data not inserted !" + e);
}
Algiri,正如 Juan 所说,您可能想向我们展示您的错误内容。 Sql 可能出于多种原因不允许您插入记录。
- 例如,@comName 可以设置为 50 个字符,而 sql table 的最大限制为 20 个字符。
你说:
"The code here inserts data into sql table and it works fine" When does it work fine? When running the command in SQL?