如何使用C#将图像上传到SQL Server

时间:2014-10-23 06:36:10

标签: c# sql sql-server

我最初将数据库中图像列的数据类型设置为图像,但此后我将其更改为VARBINARY(MAX)。但是,当我尝试运行我的代码并上传图像以存储在该列中时,每条记录都显示为NULL。我相信数据库很好,问题必须是我如何将图像数据传递到SQL查询。所以我的问题是:我需要修改什么才能以正确的格式将图像上传到数据库?计划实施图像检索。

这是数据库的样子。我包括了列名,数据类型以及选择行时得到的结果。我尝试上传图片时没有返回任何错误。当列DOES允许空值时,每个记录都尝试上传图像。 enter image description here

以下是"添加"的代码。处理与数据库通信的按钮。我试图删除与此问题无关的任何内容,例如关闭表单。

private void addButton_Click(object sender, EventArgs e)
        {
            string strConnect = @"Server=mainserver\SQLEXPRESS; Database=Inventory; Integrated Security=SSPI;";
            SqlConnection con = new SqlConnection(strConnect);
            DatabaseUtility db = new DatabaseUtility();
            string sqlStart = @"INSERT INTO Vehicles(manufacturer, model, date_Acquired, vin, year, cost";
            string sqlEnd = @" VALUES('" + makeBox.Text + "', '" + modelBox.Text + "', '" + datePicker.Text + 
                                        "', '" + vinBox.Text + "', '" + yearBox.Text + "', '" + costBox.Text;
            string sql;

            if (vinBox.TextLength != 17)
            {
                MessageBox.Show("The VIN entered is invalid", "Invalid VIN");
            }
            else if (String.IsNullOrWhiteSpace(makeBox.Text) || String.IsNullOrWhiteSpace(modelBox.Text) || 
                String.IsNullOrWhiteSpace(yearBox.Text) || String.IsNullOrWhiteSpace(vinBox.Text) || 
                String.IsNullOrWhiteSpace(costBox.Text))
            {
                MessageBox.Show("Not all required fields are filled", "Missing Information");
            }
            else
            {
                if (!String.IsNullOrWhiteSpace(askingBox.Text))
                {
                    sqlStart += ", asking_Price";
                    sqlEnd += "', '" + askingBox.Text;
                }
                if (!String.IsNullOrWhiteSpace(categoryComboBox.Text))
                {
                    sqlStart += ", category";
                    sqlEnd += "', '" + categoryComboBox.Text;
                }
                if (!String.IsNullOrWhiteSpace(additionalNotesBox.Text))
                {
                    sqlStart += ", additional_Notes";
                    sqlEnd += "', '" + additionalNotesBox.Text;
                }
                if (!openFileDialog1.CheckFileExists)
                {
                    sqlStart += @", image";
                    sqlEnd += "', '@image";
                }
                sqlStart += ")";
                sqlEnd += "')";
                sql = sqlStart + sqlEnd;
                SqlCommand insertCommand = new SqlCommand(sql, con);
                if (!openFileDialog1.CheckFileExists)
                {
                    SqlParameter sqlParam = insertCommand.Parameters.AddWithValue("@image", (object)GetImage(openFileDialog1.FileName));
                    sqlParam.DbType = DbType.Binary;
                }
                try
                {
                    MessageBox.Show(insertCommand.ToString(), "Invalid Input");
                    con.Open();
                    insertCommand.ExecuteNonQuery();
                    con.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error in insertcommand" + ex, "Invalid Input");
                }
                finally
                {
                    insertCommand.Connection.Close();
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

您尝试使用FileDialog.CheckFileExists检查所选文件是否存在,但此属性不起作用 - 它获取一个值,指示如果用户指定的文件名,对话框是否显示警告不存在。

因此,如果该属性设置为true - 并且这是OpenFileDialog的默认值 - 那么添加参数@image的代码将永远不会被执行。< / p>

如果要检查文件是否存在,可以使用File.Exists