用户代码未处理SqlException?

时间:2015-03-15 10:39:31

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

我目前在学校开始使用asp.net C#,现在他们希望我将数据插入SQL Server。现在我到目前为止已经使用了这段代码,但是当我尝试在数据库中添加一些内容时,我收到错误:

  

用户代码

未处理SqlException      

System.Data.dll中出现'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理

     

附加信息:列名或提供的值数与表定义不匹配。

有人可以解释一下我在这里做错了吗?

提前致谢。

佛瑞德。

public partial class AddMovie : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["VideoStoreConnectionString"].ConnectionString);

    protected void Page_Load(object sender, EventArgs e)
    {
            con.Open();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
            SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Movie values('" + txtmovie.Text + "')", con);
            cmd.ExecuteNonQuery();
            con.Close();
            Label1.Visible = true;
            Label1.Text = "Your Movie is Stored Successfully!";
            txtmovie.Text = "";
    }
}

1 个答案:

答案 0 :(得分:4)

如果您有一个insert命令,并且不想指定要插入值的列,那么您需要按照列中出现的列的正确顺序为表中的所有列提供VALUES。

在这种情况下,我认为您的表格电影的列数多于应该包含电影名称的列数(IE标题?)。因此,您需要为所有列编写值或指定哪个列应该接收txtmovie文本框的值

SqlCommand cmd = new SqlCommand(@"INSERT INTO dbo.Movie (Title) 
                                values(.....) ....

说这不是向数据库提供命令文本的正确方法 您应该始终使用参数化查询

protected void Button1_Click(object sender, EventArgs e)
{
    string cmdText = @"INSERT INTO dbo.Movie  (Title) values(@name)";

    using(SqlConnection con = new SqlConnection(.......constring here...))
    using(SqlCommand cmd = new SqlCommand(cmdText, con))
    { 
        con.Open();
        cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = txtmovie.Text;
        cmd.ExecuteNonQuery();
        ....
    }
}

最后,一般来说,使用SqlConnection(或其他所有类型的Disposable对象)的最佳方法是在using语句中本地创建它,而不将其保存在全局变量中并打开/关闭它不同的地方 Using Statement对此方法非常有用,因为它可以保证连接在异常情况下也可以关闭和处理。如果您可以尝试始终将全局对象的数量保持在最小值。