在c#中将新元组插入sql

时间:2012-05-09 12:56:21

标签: c# asp.net sql

我在将新元组插入表格时遇到了麻烦。它没有给出任何错误,我不知道为什么它不能正常工作。顺便说一句TextBox3有类似的东西:C:\ Temp \ Pic5.jpg。这是我的代码:

  protected void Button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\MYDB.mdf;Integrated Security=True;User Instance=True");
    byte[] data;

    try
    {
        data = System.IO.File.ReadAllBytes(@"" + TextBox3.Text);
        string val1 = "" + TextBox1.Text;
        string val2 = "" + TextBox2.Text;
        string val3 = "" + TextBox3.Text;
        SqlCommand cmd = new SqlCommand("Insert INTO Books (Book_Name,Author_Name,Image,In_Lib) VALUES (@BN,@AN,@DATA,@LIB)", con);
        cmd.Parameters.AddWithValue("@BN", val1);
        cmd.Parameters.AddWithValue("@AN", val2);
        cmd.Parameters.AddWithValue("@DATA", val3);
        cmd.Parameters.AddWithValue("@LIB", "YES");
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

    catch (Exception err)
    {
        Console.WriteLine(err.Message);
    }
}

asp part

Book Name:   
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
Author Name:&nbsp;
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
Image Name:&nbsp;&nbsp;
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="Submit" />
<br />

我的数据库是这样的:

  • Book_Name varchar(50)
  • Author_Name varchar(50)
  • 图片图片
  • In_Lib varchar(50)

4 个答案:

答案 0 :(得分:2)

由于Image列的类型为Image,因此正确的参数值将是字节数组,而不是字符串。这可能会导致错误。如果您现在不添加图片,请忽略此参数或明确将其设置为DBNull.Value

我认为你来自Visual Basic背景(否则对于奇怪的"" + TextBox1.Text构造没有解释),所以作为旁注:传递给AddWithValue的调用的值应该匹配数据库中的列类型。我的意思是:将字符串传递给int类型的参数可能有效,除非您通过Hello。像这样的错误有时很难找到,所以请:确保从头开始匹配参数类型。

答案 1 :(得分:1)

您正在将TextBox3.Text中指定的文件读入data,而不是在任何地方使用它。此外,您将文本传递到Image字段,您可能想要

cmd.Parameters.AddWithValue("@DATA", data);

而不是

cmd.Parameters.AddWithValue("@DATA", val3);

答案 2 :(得分:0)

我认为以下内容应该有效

尝试:

cmd.Parameters.Add("parameter_name", System.Data.SqlDbType.BigInt).Value = 1233;

答案 3 :(得分:0)

您的问题出现在图片中。在数据库中,您有数据类型Image的数据库字段Image,并且您正在尝试存储字符串数据。

string val3 = "" + TextBox3.Text;
cmd.Parameters.AddWithValue("@DATA", val3);

使用SqlDbType.Image存储商店。