【问题标题】:saving image in sql data base how? [duplicate]如何在sql数据库中保存图像? [复制]
【发布时间】:2016-09-28 06:07:52
【问题描述】:

C# 代码:

   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/*" />

我该怎么做? 我添加了所有插入代码,请问如何保存图像?

我更新了全表的代码

【问题讨论】:

  • 试试这个:NewUser.Parameters.Add("@im", System.Data.SqlDbType.VarBinary); NewUser.Parameters["@im"] = image;
  • 图片里面应该放什么?
  • 图片的字节[]。确保从文件中读取图像时使用 UTF8 编码而不是字符串。将图像放入字符串会损坏图像数据。

标签: c# sql-server


【解决方案1】:

这是一个将图像存储到 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

【讨论】:

  • 我没有成功用我的数据库做很多错误有人可以发送一个答案,将与图像正确插入?
  • 你遇到了什么错误?
【解决方案2】:
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;
            }

    }  

【讨论】:

  • 我不认为它会起作用我需要一次性插入它们?
  • 用户将点击浏览>选择图像文件>然后控件将来到此代码的第一行,然后图像将一次保存在数据库中,正如你所说你需要将图像保存在数据库中。使用 FileUpload 控件。如果要保存多张图片,请使用 for 循环。
  • 好的,但是如果没有 img,我怎样才能实现第一个完整插入
  • 我编辑了答案。我假设@im 是你的图像变量。你需要将字节保存为它的值。
  • strean fs 是一个错误我在使用时应该有什么?
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 2015-08-13
  • 2011-10-25
  • 2014-10-01
  • 2015-01-08
  • 2013-02-09
相关资源
最近更新 更多