2016-05-30 100 views
0

C#代碼:在sql數據庫中保存圖像如何?

SqlCommand NewUser = new SqlCommand("INSERT INTO [User] Values (@username,@password,@name,@lastname,@location,@profesion,@email,@gender,@money,@pro,@xp,@lv,@m1,@m2,@m3,@m4,@m5,@d1,@d2,@d3,@d4,@d5,@im);", c); 
     NewUser.Connection = c; 
     NewUser.Parameters.AddWithValue("@username", txtuser.Text); 
     NewUser.Parameters.AddWithValue("@password", txtpass.Text); 
     NewUser.Parameters.AddWithValue("@name", txtFName.Text); 
     NewUser.Parameters.AddWithValue("@lastname", txtLName.Text); 
     NewUser.Parameters.AddWithValue("@location", ddlcountry.SelectedItem.Text); 
     NewUser.Parameters.AddWithValue("@profesion", txtprofession.Text); 
     NewUser.Parameters.AddWithValue("@email", txtemail.Text); 
     NewUser.Parameters.AddWithValue("@gender", rbgendere.SelectedItem.Text); 
     NewUser.Parameters.AddWithValue("@money", 0); 
     NewUser.Parameters.AddWithValue("@pro", DBNull.Value); 
     NewUser.Parameters.AddWithValue("@xp", 0); 
     NewUser.Parameters.AddWithValue("@lv", 1); 
     NewUser.Parameters.AddWithValue("@m1", 0); 
     NewUser.Parameters.AddWithValue("@m2", 0); 
     NewUser.Parameters.AddWithValue("@m3", 0); 
     NewUser.Parameters.AddWithValue("@m4", 0); 
     NewUser.Parameters.AddWithValue("@m5", 0); 
     NewUser.Parameters.AddWithValue("@d1", 0); 
     NewUser.Parameters.AddWithValue("@d2", 0); 
     NewUser.Parameters.AddWithValue("@d3", 0); 
     NewUser.Parameters.AddWithValue("@d4", 0); 
     NewUser.Parameters.AddWithValue("@d5", 0); 
     NewUser.Parameters.AddWithValue("@im",); 
     Session["CurentUserid"] = txtuser.Text; 
     c.Open(); 
     NewUser.ExecuteNonQuery(); 
     c.Close(); 
     Session["Conect"] = (bool)true; 
     Response.Redirect("Finish Had Member.aspx", true); 

表代碼:

CREATE TABLE [dbo].[User] (
    [Username] VARCHAR (100) NOT NULL, 
    [Pasword] VARCHAR (100) NOT NULL, 
    [FName]  VARCHAR (MAX) NOT NULL, 
    [LName]  VARCHAR (MAX) NOT NULL, 
    [Location] VARCHAR (MAX) NOT NULL, 
    [Profesion] VARCHAR (MAX) NOT NULL, 
    [email]  VARCHAR (MAX) NOT NULL, 
    [gender] VARCHAR (MAX) NOT NULL, 
    [money]  INT    NOT NULL, 
    [property] VARCHAR (MAX) NULL, 
    [xp]  INT    NOT NULL, 
    [level]  INT    NOT NULL, 
    [mission1] INT    NOT NULL, 
    [mission2] INT    NOT NULL, 
    [mission3] INT    NOT NULL, 
    [mission4] INT    NOT NULL, 
    [mission5] INT    NOT NULL, 
    [did1]  INT    NOT NULL, 
    [did2]  INT    NOT NULL, 
    [did3]  INT    NOT NULL, 
    [did4]  INT    NOT NULL, 
    [did5]  INT    NOT NULL, 
[image]  VARBINARY (MAX) NULL, 
    PRIMARY KEY CLUSTERED ([Username] ASC) 
); 

我想從C#頁的圖像保存到數據的基礎上這是HTML:

<input runat="server" id="pho" type="file" name="file[]" multiple="" accept="image/*" /> 

我該怎麼做? 我添加了所有的插入代碼plss loke我如何保存圖像?

我更新代碼有個全表

+0

試試這個:NewUser.Parameters.Add( 「@ IM」,System.Data.SqlDbType.VarBinary); NewUser.Parameters [「@ im」] = image; – jdweng

+0

我應該如何放置圖像? –

+6

http://stackoverflow.com/questions/744589/how-do-you-store-a-picture-in-an-image-column/744603#744603 – Tewr

回答

0

下面是用於存儲圖像到SQL Server的樣本代碼:

SqlConnection conn = new SqlConnection(connectionString); 

try 
{ 
    int imageLength = uploadInput.PostedFile.ContentLength; 
    byte[] picbyte = new byte[imageLength]; 
    uploadInput.PostedFile.InputStream.Read (picbyte, 0, imageLength); 

    SqlCommand command = new SqlCommand("INSERT INTO ImageTable (ImageFile) VALUES (@Image)", conn); 
    command.Parameters.Add("@Image", SqlDbType.Image); 
    command.Parameters[0].Value = picbyte; 

    conn.Open(); 
    command.ExecuteNonQuery(); 
    conn.Close(); 
} 
finally 
{ 
    if (conn.State != ConnectionState.Closed) 
    { 
     conn.Close(); 
    } 
} 

注: uploadInput是一個文件輸入控制,上載圖像文件到服務器。代碼來自ASP.NET應用程序。

這裏是插入腳本到圖像輸入欄:

INSERT INTO ImageTable (ImageColumn) 

SELECT ImageColumn FROM 
OPENROWSET(BULK N'C:\SampleImage.jpg', SINGLE_BLOB) 
AS ImageSource(ImageColumn); 

編輯:要知道更多關於這個話題,請參閱here

+0

我不會成功做到這一點與我的數據庫很多的錯誤有人可以發送一個答案,將corectly插入圖像PLSS? –

+0

你得到的錯誤是什麼? – SSJGSS

0
Try this.. 

    Stream fs = FileUpload1.PostedFile.InputStream; 
      BinaryReader br = new BinaryReader(fs); 
      Byte[] bytes = br.ReadBytes((Int32)fs.Length); 

SqlCommand NewUser = new SqlCommand("INSERT INTO [User] Values (@username,@password,@name,@lastname,@location,@profesion,@email,@gender,@money,@pro,@xp,@lv,@m1,@m2,@m3,@m4,@m5,@d1,@d2,@d3,@d4,@d5,@im);", c); 
     NewUser.Connection = c; 
     NewUser.Parameters.AddWithValue("@username", txtuser.Text); 
     NewUser.Parameters.AddWithValue("@password", txtpass.Text); 
     NewUser.Parameters.AddWithValue("@name", txtFName.Text); 
     NewUser.Parameters.AddWithValue("@lastname", txtLName.Text); 
     NewUser.Parameters.AddWithValue("@location", ddlcountry.SelectedItem.Text); 
     NewUser.Parameters.AddWithValue("@profesion", txtprofession.Text); 
     NewUser.Parameters.AddWithValue("@email", txtemail.Text); 
     NewUser.Parameters.AddWithValue("@gender", rbgendere.SelectedItem.Text); 
     NewUser.Parameters.AddWithValue("@money", 0); 
     NewUser.Parameters.AddWithValue("@pro", DBNull.Value); 
     NewUser.Parameters.AddWithValue("@xp", 0); 
     NewUser.Parameters.AddWithValue("@lv", 1); 
     NewUser.Parameters.AddWithValue("@m1", 0); 
     NewUser.Parameters.AddWithValue("@m2", 0); 
     NewUser.Parameters.AddWithValue("@m3", 0); 
     NewUser.Parameters.AddWithValue("@m4", 0); 
     NewUser.Parameters.AddWithValue("@m5", 0); 
     NewUser.Parameters.AddWithValue("@d1", 0); 
     NewUser.Parameters.AddWithValue("@d2", 0); 
     NewUser.Parameters.AddWithValue("@d3", 0); 
     NewUser.Parameters.AddWithValue("@d4", 0); 
     NewUser.Parameters.AddWithValue("@d5", 0); 
     NewUser.Parameters.AddWithValue("@im", bytes); 
     Session["CurentUserid"] = txtuser.Text; 
     c.Open(); 
     NewUser.ExecuteNonQuery(); 
     c.Close(); 
     Session["Conect"] = (bool)true; 
     Response.Redirect("Finish Had Member.aspx", true); 

**

編輯:好的,我在我的系統上試過。下面的代碼成功地以 二進制格式插入圖像。

**

SQL表

CREATE TABLE [dbo].[Image_table]( 

    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [image]  VARBINARY (MAX) NULL 
    ) 



protected void Button1_Click(object sender, EventArgs e) 
    { 
     Stream fs = FileUpload.PostedFile.InputStream; 
     BinaryReader br = new BinaryReader(fs); 
     Byte[] bytes = br.ReadBytes((Int32)fs.Length); 

     string consString = ConfigurationManager.ConnectionStrings["connectionKey"].ConnectionString; 
     SqlConnection con = new SqlConnection(consString); 

      try 
      { 
       SqlCommand cmd = new SqlCommand(); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "insert into [dbo].[Image_table] values (@img)"; 
       cmd.Parameters.Add("@img", SqlDbType.Image).Value = bytes; 
       cmd.Connection = con; 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 

      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

    } 
+0

我不認爲它會工作,我需要在一次插入全部? –

+0

用戶將點擊瀏覽>選擇圖像文件>然後控件將會出現在代碼的第一行,然後圖像將一次保存在數據庫中,正如您所說的,您需要將圖像保存在數據庫中。使用FileUpload控件。如果您想保存多個圖像,請使用for循環。 – Sak

+0

好吧,但我怎麼能exucate第一次完整插入沒有img –

相關問題