gpt4 book ai didi

c# - 在 C# 中使用 UPDATE MySQL 命令

转载 作者:行者123 更新时间:2023-11-30 00:02:27 25 4
gpt4 key购买 nike

假设我有一个类中的这个方法:

private void btnChangeImage_Click(object sender, EventArgs e)
{
using (var openFileDialogForImgUser = new OpenFileDialog())
{
string location = null;
string fileName = null;
openFileDialogForImgUser.Filter = "Image Files (*.jpg, *.png, *.gif, *.bmp)|*.jpg; *.png; *.gif; *.bmp|All Files (*.*)|*.*"; // filtering only picture file types
var openFileResult = openFileDialogForImgUser.ShowDialog(); // show the file open dialog box
if (openFileResult == DialogResult.OK)
{
using (var formSaveImg = new FormSave())
{
var saveResult = formSaveImg.ShowDialog();
if (saveResult == DialogResult.Yes)
{
imgUser.Image = new Bitmap(openFileDialogForImgUser.FileName); //showing the image opened in the picturebox
location = openFileDialogForImgUser.FileName;
fileName = openFileDialogForImgUser.SafeFileName;

FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read); //Creating a filestream to open the image file
int fileLength = (int)fs.Length; // getting the length of the file in bytes
byte[] rawdata = new byte[fileLength]; // creating an array to store the image as bytes
fs.Read(rawdata, 0, (int)fileLength); // using the filestream and converting the image to bits and storing it in an array

MySQLOperations MySQLOperationsObj = new MySQLOperations("localhost", "root", "myPass");
MySQLOperationsObj.saveImage(rawdata);
fs.Close();
}
else
openFileDialogForImgUser.Dispose();
}
}
}
}

这个方法来自另一个类(MySQLOperations):

public void saveImage(byte[] rawdata)
{
try
{
string myConnectionString = "Data Source = " + server + "; User = " + user + "; Port = 3306; Password = " + password + ";";
MySqlConnection myConnection = new MySqlConnection(myConnectionString);
string currentUser = FormLogin.userID;
string useDataBaseCommand = "USE " + dbName + ";";
string updateTableCommand = "UPDATE tblUsers SET UserImage = @file WHERE Username = \'" + currentUser + "\';";
MySqlCommand myCommand = new MySqlCommand(useDataBaseCommand + updateTableCommand, myConnection);
myCommand.Parameters.AddWithValue("@file", rawdata);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

如果必须的话,这是我的 MySQLOperations 类的构造函数:

public MySQLOperations(string server, string user, string password)
{
this.server = server;
this.user = user;
this.password = password;
}

我想做的是将图像文件(用户通过打开文件对话框选择)保存到数据库中。问题是我收到此错误:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本对应的手册,以获取在 ';UPDATE tblUsers SET UserImage = _binary'?PNG 附近使用的正确语法...(并且等等)。所以,我无法真正将文件保存在数据库中。我很想发布一张图片来说明如何在 MessageBox 中看到错误,但我猜我的帐户没有被授予以下权限:就这样做吧。

我不太确定语法错误在哪里。我在想,它在 @file 中 - 但这只是一个猜测。非常感谢您的帮助。哦,表列 UserImage 的类型为 LONGBLOB。

我也有兴趣了解的其他事情:

  • 是否有必要为我的表添加另一列来存储文件的大小(因为我需要检索文件稍后显示图像)?
  • 我在方法中这样使用 using 语句可以吗btnChangeImage_Click?

非常感谢。

编辑:问题已解决。这么简单的事情竟然没人重视。感谢所有试图提供帮助的人。我仍然愿意听听您对底部问题(关于项目符号的问题)的意见。

最佳答案

我认为问题出在以下代码行:

WHERE Username = \'" + currentUser + "\';"

它应该更改为以下内容:

WHERE Username = " + currentUser;

或者更好(以避免sql注入(inject))以下一个:

WHERE Username = @Username";
myCommand.Parameters.AddWithValue("@Username", currentUser);

关于c# - 在 C# 中使用 UPDATE MySQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com