2012-05-09 6 views
0

テーブルに新しいタプルを挿入する際に問題があります。それは何の誤りもなく、私はなぜそれが正しく動作しないのかわかりません。ところで、TextBox3には次のようなものがあります:C:\ Temp \ Pic5.jpg。ここに私のコードです:cで新しいタプルをSQLに挿入する#

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の一部

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 varch AR(50)
+0

コンソールが表示されていますか? –

+1

あなたはデータベーステーブルを表示できますか? – Murtaza

+1

そのパラメータのデータ型は何ですか? – levi

答えて

1

TextBox3.Textで指定されたファイルをdataに読み込み、どこにも使用していません。また、あなたがImageフィールドにテキストを渡している、あなたはおそらく

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

代わりにあなたの問題が画像である

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

ああ、あなたにはありがとうございます。それは今働いている。 –

0

私は次のように

試して動作するはずだと思う:あなたのImage列として

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

申し訳ありませんが、動作しませんでした。 –

+1

これは、自動的に遅延させるのではなく、その型を渡しているだけの 'AddWithValue'と同じです。 –

2

はタイプImageであり、正しいパラメータ値は、バイト配列、ではないだろう文字列。これにより、エラーが発生する可能性があります。今すぐイメージを追加しない場合は、このパラメータを省略するか、明示的にDBNull.Valueに設定してください。

私はサイドノートようにあなたは、Visual Basicの背景(それ以外の場合は奇妙な"" + TextBox1.Text構築物について何の説明がありません)から来ていると推測:AddWithValueへの呼び出しに渡された値は、データベース内の列の型と一致する必要があります。これは私が意味することは:あなたがHelloを渡さない限り、タイプintのパラメータに文字列を渡すことができるかもしれません。そのようなエラーは見つからないことがありますので、必ず最初からパラメータの種類を一致させてください。

+0

ありがとうThorsten。私は最終的に私のエラーを発見しました。pjotrはcmd.Parameters.AddWithValue( "@ DATA"、data); cmd.Parameters.AddWithValue( "@ DATA"、val3)の代わりに。 –

0

のやってみたかったです。データベースには、データ型がImageのデータベースフィールドImageがあり、文字列データを格納しようとしています。

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

SqlDbType.Imageでストアしてください。

関連する問題