【发布时间】:2013-08-02 10:16:00
【问题描述】:
我一直在寻找解决方案,但不知道我哪里做错了。但我是第一次这样做。
我有一个班级学生
class Students
{
public Image photo { get; set; }
public bool AddStudent(Students _student)
{
Settings mySettings = new Settings();
SqlCeConnection conn = new SqlCeConnection(mySettings.StudentsConnectionString);
SqlCeCommand cmd = new SqlCeCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = conn;
cmd.CommandText = "insert into students (firstname, lastname, dob, allergic, allergydetails, memo, address, photo) " +
"Values (" +
"'" + @FirstName + "'," +
"'" + @LastName + "'," +
"'" + @Dob + "'," +
"'" + @isAllergic + "'," +
"'" + @AllergyDetails + "'," +
"'" + @Memo + "'," +
"'" + @photo + "'," +
"'" + @Address + "')";
cmd.Parameters.Add("@FirstName", _student.FirstName);
cmd.Parameters.Add("@LastName", _student.LastName);
cmd.Parameters.Add("@Dob", _student.Dob);
cmd.Parameters.Add("@isAllergic", _student.isAllergic);
cmd.Parameters.Add("@AllergyDetails", _student.AllergyDetails);
cmd.Parameters.Add("@Memo", _student.Memo);
cmd.Parameters.Add("@photo", _student.photo);
cmd.Parameters.Add("@Address", _student.Address);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
return false;
}
finally
{
if (conn.State == System.Data.ConnectionState.Open) conn.Close();
cmd = null;
}
}
现在我像这样从表单中传递属性值。
private void btnAdd_Click(object sender, EventArgs e)
{
Students myStudent = new Students();
myStudent.FirstName = txtFirstName.Text.Trim();
myStudent.LastName = txtLastName.Text.Trim();
myStudent.Dob = dtPicker1.Value;
myStudent.Memo = txtMemo.Text.Trim();
myStudent.Address = txtAddress.Text.Trim();
myStudent.photo = Image.FromFile(openFileDialog1.FileName);
// Insert New Record
if (myStudent.AddStudent(myStudent))
MessageBox.Show("Student Added Successfully");
}
我收到以下错误
不存在从 DbType System.Drawing.Bitmap 到已知的映射 SqlCeType。
但我不知道为什么我没有成功。任何建议将不胜感激。
【问题讨论】:
-
你需要把你的图片转换成一个字节[],然后它可以存储在一个图片数据类型msdn.microsoft.com/en-us/library/ms172424.aspx
-
根据我的经验,这样做已经有一段时间了...您应该在数据库中使用 BLOB 字段,并将图像流式传输到字节数组,然后再将其放入 BLOB 字段中。
-
你不明白,我的问题不一样。我首先将照片保存在类实例中,然后将其上传到数据库。在该实例中,我没有 openfiledialog.filename 等功能。
-
确实可以将图像上传到 MS 数据库,但请确保图像质量低(缩略图),因为它会减慢您的数据库。将图像存储在服务器上,并将图像的路径作为字符串放入数据库中以加载图像。
-
好评。谢谢,我会记住这一点。但是如果我使用 SQL Compact CE 会有什么不同吗?我现在收到异常不支持转换。 [要转换的类型(如果知道)= nvarchar,要转换的类型(如果知道)= binary]
标签: c# sql sql-server-ce