【问题标题】:Check if record inserted successfully检查记录是否插入成功
【发布时间】:2015-07-24 02:46:48
【问题描述】:

此处的代码将数据插入到 SQL Server 表中,并且工作正常,但我不知道该过程是否成功。此处的代码显示错误,并且无法按预期工作。如何使用 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;
    }
}

【问题讨论】:

  • 你遇到了什么错误?
  • return 关键字后面不能跟对象表达式
  • 听起来你正试图从 void 方法或类似的方法返回一个字符串。由于您的代码不完整,因此无法真正分辨。
  • 你调试看看是哪一行导致了错误?
  • 为什么你有br, bytes, constr?你好像没用过

标签: sql asp.net sql-server c#-4.0


【解决方案1】:

如MSDN 中所述:

对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1。

int a = cmd.ExecuteNonQuery();
if (a > 0) {
 //at least one record has been affected
}

【讨论】:

    【解决方案2】:

    嗯,你的方法被定义为void,所以很明显,你不能返回字符串:

    return"Data not inserted !" + ex;
    

    我不清楚你想在这里做什么。我建议完全删除try-catch。如果出现问题,只需让异常传播。如果一切正常,则说明插入工作正常。

    如果您真的很偏执,我想您可以按照其他答案的建议进行操作,并检查 cmd.ExecuteNonQuery(); 是否返回 1。但是对于insert 声明,我觉得这种说法毫无意义。 我收回了这一点。在这种情况下,检查受影响的行数确实没有意义。如果insert由于某种原因失败,它不会返回-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);
    }
    

    【讨论】:

    • 我只是想在数据插入成功与否时显示消息
    • 尝试将其登录到控制台或将返回类型更改为字符串
    【解决方案3】:

    Algiri,正如 Juan 所说,您可能想向我们展示您的错误说明。由于几个原因,Sql 可能不允许您插入记录。

    • 例如,@comName 可以设置为 50 个字符,而 sql 表的最大限制为 20 个字符。

    你说:

    “这里的代码将数据插入到sql表中,效果很好” 什么时候可以正常工作?在 SQL 中运行命令时?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-04
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2022-11-10
      • 2012-03-06
      相关资源
      最近更新 更多