C# 将图像保存到数据库时出错
我有一个OpenFileDialog,它会选择photo并将其保存到数据库中 但问题是,当我在openFileDialog的对话框结果正常时访问该类 当使用以下参数调用SavePhoto函数时,C# 将图像保存到数据库时出错,c#,.net,winforms,C#,.net,Winforms,我有一个OpenFileDialog,它会选择photo并将其保存到数据库中 但问题是,当我在openFileDialog的对话框结果正常时访问该类 当使用以下参数调用SavePhoto函数时,表示没有这样的表:PhotoFile: TODO(pj):在此处输入值 这就是我到目前为止所尝试的 OpenFileDialog d = new OpenFileDialog(); d.Filter = ("JPEG Imange (*.jpg|*.jpg|PNG Image (*.pn
表示没有这样的表:PhotoFile
:
TODO(pj):在此处输入值
这就是我到目前为止所尝试的
OpenFileDialog d = new OpenFileDialog();
d.Filter = ("JPEG Imange (*.jpg|*.jpg|PNG Image (*.png)|All Files*.*");
if ((d.ShowDialog()) == DialogResult.OK)
{
SavePhoto(txtID.text,d.fileName);
}
下面是函数的代码
try {
using (SQLite.SQLiteConnection SQLConnect = new SQLite.SQLiteConnection(g_constring)) {
byte[] photo = FileImageToByte(PhotoFile);
SQLConnect.Open();
if (SQLConnect.State == ConnectionState.Open) {
SQLiteCommand SQLcommand = new SQLiteCommand(SQLConnect);
SQLcommand = SQLConnect.CreateCommand;
SQLcommand.CommandText = "DELETE FROM PhotoFile WHERE PhotoID = '" + PhotoId + "'";
SQLcommand.ExecuteNonQuery();
SQLcommand.Parameters.Clear();
SQLcommand.CommandText = "INSERT INTO PhotoFile(PhotoID, Photo) VALUES(@EmployeeID, @Photo1)";
SQLiteParameter SQLparmID = new SQLiteParameter("@EmployeeID", PhotoId);
SQLparmID.DbType = DbType.String;
SQLparmID.Value = PhotoId;
SQLcommand.Parameters.Add(SQLparmID);
SQLiteParameter SQLparm = new SQLiteParameter("@Photo1", photo);
SQLparm.DbType = DbType.Binary;
SQLparm.Value = photo;
SQLcommand.Parameters.Add(SQLparm);
SQLcommand.ExecuteNonQuery();
bReturn = true;
} else {
bReturn = false;
}
}
} catch (System.Exception eX) {
MessageBox.Show(eX.Message.ToString(), "Error in database", MessageBoxButtons.OK, MessageBoxIcon.Error);
bReturn = false;
}
return bReturn;
}
PhotoFile表存在于我的数据库中事实上我已经尝试了Windows窗体,如果对话框结果=ok,则触发该函数,但当我使用openFileDialog时,它总是产生如上所述的错误。这与openFileDialog本身无关,这是因为SQL查询失败并声明表不存在(
Photofile
)-因此我建议它不存在,您应该检查表名,或者在必要时创建表名
除此之外,您的查询还有一个问题:您的方法指示将保存一张照片,但您使用了
删除。此外,如果表确实存在/当您成功地对表名进行正确排序时,我建议您不要使用字符串作为标识符。任何地方都不会进行保存。这与OpenFileDialog本身无关,这是因为SQL查询失败并声明表不存在(Photofile
)-因此我建议它不存在,您应该检查表名,或者在必要时创建表名
除此之外,您的查询还有一个问题:您的方法指示将保存一张照片,但您使用了删除。此外,如果表确实存在/当您成功地对表名进行正确排序时,我建议您不要使用字符串作为标识符。任何地方都没有保存。您的AppMain.ConnectionString
指向错误的数据库,该数据库不包含任何PhotoTable
表。你可能想再检查一遍
您的代码删除了与提供的PhotoID
匹配的记录。顺便说一下,它不会将任何内容保存到数据库中。您的AppMain。ConnectionString
指向错误的数据库,该数据库不包含任何PhotoTable
表。你可能想再检查一遍
您的代码删除了与提供的PhotoID
匹配的记录顺便说一句,它不会将任何内容保存到数据库中。这与OpenFileDialog有什么关系?看起来SavePhoto的某个特定参数导致了错误,而OpenFileDialog本身没有问题。您确定问题不在函数中吗?应用程序到底在哪里中断?只是想知道为什么SavePhoto()
方法实际上会从sql查询中删除?当您从OpenFileDialog
返回时d.FileName
的值是多少?这应该是完整的路径名(即“c:\myapp\photos\myphoto.jpg”)。这和你在Windows窗体应用程序中得到的值相同吗?我忘了发布更新的代码对不起,我的错。。如果id已经存在于数据库中,则删除该照片。这与OpenFileDialog有何关系?看起来SavePhoto的某个特定参数导致了错误,而OpenFileDialog本身没有问题。您确定问题不在函数中吗?应用程序到底在哪里中断?只是想知道为什么SavePhoto()
方法实际上会从sql查询中删除?当您从OpenFileDialog
返回时d.FileName
的值是多少?这应该是完整的路径名(即“c:\myapp\photos\myphoto.jpg”)。这和你在Windows窗体应用程序中得到的值相同吗?我忘了发布更新的代码对不起,我的错。。如果id已经存在于数据库中,则删除该照片。或者检查连接字符串。@NickGotch如果连接字符串不正确,则OP应该会收到连接错误,除非他们连接到错误的数据库。如果他没有指定数据库,例如,它正在查看主数据库,或者它是空的,或者代码运行的用户没有查看表的权限…@NickGotch我不确定是否使用SQLite,但是除了示例的第一个实例之外,对于大多数数据库引擎中的实例,它们应该会得到明显的*错误*虽然有些可能隐藏了实际含义。明显的错误是没有这样的表,为什么没有另一个球赛。或者检查连接字符串。@NickGotch如果连接字符串不正确,OP应该得到连接错误,除非他们连接到错误的数据库。如果他没有指定数据库,例如,它正在查看master,或者它是空的,或者代码正在运行的用户没有查看表的权限…@NickGotch好吧,我不确定是否使用SQLite,但是除了您的示例的第一个实例之外,对于大多数数据库引擎中的实例,它们应该会出现明显的*错误*虽然有些人可能隐藏了真正的意思。明显的错误是没有这样的表,为什么没有另一场球赛呢。