检查记录是否已成功插入

时间:2015-07-24 02:46:48

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

这里的代码将数据插入到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;
    }
}

3 个答案:

答案 0 :(得分:3)

MSDN中所述:

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

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

答案 1 :(得分:1)

嗯,您的方法定义为void,很明显,您无法返回字符串:

return"Data not inserted !" + ex;

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

如果你真的是偏执狂,我猜你可以这样做,因为另一个答案是建议并检查cmd.ExecuteNonQuery();是否返回1。但是对于一个insert语句,我发现那种无意义。我把它拿回去了。在这种情况下,检查受影响的行数确实毫无意义。如果insert由于某种原因失败,它将不会返回-1,它会抛出异常。

BTW,考虑将SqlConnection con对象的使用与using语句包装在一起,就像对SqlCommand cmd进行操作一样。

修改

假设这是一些WinForms应用程序,并且您只想给用户一些视觉反馈,如果插入有效,那么您可以尝试这样做:

try
{
    // do your sql stuff here.
    MessageBox.Show("Insert worked!");
}
catch(SqlException e)
{
    MessageBox.Show("Data not inserted !" + e);
}

答案 2 :(得分:0)

Algiri,就像Juan说的那样,你可能想告诉我们你的错误是什么。由于几个原因,Sql可能不允许您插入记录。

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

你说:

  

“这里的代码将数据插入到sql表中并且工作正常”   什么时候工作正常?在SQL中运行命令时?