2016-05-18 10 views
0

ユーザーのプロファイルイメージをSQLに保存しようとしています。私の問題は、データベーステーブルには何も保存されないということです。イメージを保存する列には、データ型としてimageがあります。ASP.NETでFileUploadを使用してSQLでイメージを更新する

ここに私のコードです:

更新:コードが更新され、動作しています。問題はクエリで使用されたパラメータでした。 SeMとCrowcoderに感謝します!

protected void ButtonPic_Click(object sender, EventArgs e) 
    { 
     string filePath = FileUpload1.PostedFile.FileName; 
     string filename = Path.GetFileName(filePath); 
     string ext = Path.GetExtension(filename); 
     string contenttype = string.Empty; 
     string username = User.Identity.Name; // Gets the current username 

     switch (ext) 
     { 
      case ".jpg": 
       contenttype = "image/jpg"; 
       break; 
      case ".png": 
       contenttype = "image/png"; 
       break; 
     } 

     if (contenttype != string.Empty) 
     { 
      Stream fs = FileUpload1.PostedFile.InputStream; 
      BinaryReader br = new BinaryReader(fs); 
      byte[] bytes = br.ReadBytes((int)fs.Length + 1); 

      string base64String = Convert.ToBase64String(bytes, 0, bytes.Length); 
      Image1.ImageUrl = "data:image/png;base64," + base64String; 

      string constr = ConfigurationManager.ConnectionStrings["LoginDBConnectionString"].ConnectionString; 
      string strQuery = "UPDATE Users SET [email protected] WHERE [email protected]"; 

      try 
      { 
       using (SqlConnection con = new SqlConnection(constr)) 
       { 
        con.Open(); 
        using (SqlCommand cmd = con.CreateCommand()) 
        { 
         cmd.CommandType = CommandType.Text; 
         cmd.Parameters.Add(new SqlParameter("@data", bytes)); 
         cmd.Parameters.Add(new SqlParameter("@user", username)); 
         cmd.CommandText = strQuery; 
         cmd.ExecuteNonQuery(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
     else 
     { 
      lblMessage.ForeColor = System.Drawing.Color.Red; 
      lblMessage.Text = "Filformat stöds inte." + 
       " Endast jpg/png är tillåtet"; 
     } 
    } 

バイト配列への変換は機能していますが、問題がどこにあるかわかりません。

try 
{ 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
     con.Open(); 
     using (SqlCommand cmd = con.CreateCommand()) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.Add(new SqlParameter("@data", bytes)); 
      cmd.Parameters.Add(new SqlParameter("@user", LoginName1.ToString())); 
      cmd.CommandText = strQuery; 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
catch(Exception ex) 
{ 
    //Handle your exception 
} 

は、あなたの例外をキャッチし、データベースまたはクエリ文字列から問題点を確認してください。

+0

try/catchブロックを置き、エラーを見つけてください –

+0

プロジェクトには、接続文字列があるxml構成ファイルがあります。 xmlを開き、接続文字列が正しいかどうかを確認します( "LoginDBConnectionString")。 – jdweng

+0

'SqlDataAdapter sda = new SqlDataAdapter()'はどこで使用しましたか? – SeM

答えて

0

は次のようにその一部を変更、その後、using(SqlDataAdapter sda = new SqlDataAdapter()){}を削除します。

+0

でこれが見つかりました。(SqlCommand cmd = new SqlCommand(strQuery)) –

+0

ええ、私はそれを見ましたが、答えから削除するのを忘れました。 – SeM

+0

@SeM、あなたは 'SqlDataAdapter'の削除を提案することは正しいですが、それは問題の原因ではありません。 – Crowcoder

0

try-catchブロックを使用して、例外を知ることができます。

sqlデータアダプタを使用していないので、削除してください。

このlinkをお試しください。

0

のexec sp_executesqlをするN'UPDATEのユーザーは、ユーザー名= @ユーザー」、N '@データ画像、@ユーザーデータ型はnvarchar(35)'、データ=デフォルト、@ユーザー= N'System @データ@ =画像を設定。 Web.UI.WebControls.LoginName」 - LoginName1TextBoxで、あなたが値を取得するTextプロパティにアクセスしなければならないと仮定すると、プロファイラ

でこれを見つけました。あなたがしなければならないSystem.Web.UI.WebControls.LoginName

cmd.Parameters.Add(new SqlParameter("@user", LoginName1.Text)); 

UPDATE:あなたToString()あなたが見ているものを手に入れるコントロール、コントロールの名前場合

私はそのLoginName1に気づいているはずですTextBoxではありません。 Userプロパティにアクセスする必要があるかもしれませんが、値を取得するためにLoginNameコントロールのプロパティは表示されませんが、おそらく私はそれを見逃しています。

関連する問題