1

代码:

string connString = "SERVER=;UID=;PASSWORD=;DATABASE=;";
MySqlConnection connect = new MySqlConnection(connString);
MySqlCommand myCommand = connect.CreateCommand();

string input = textBox4.Text;

myCommand.CommandText = "SELECT * FROM project WHERE Id = @input";
connect.Open();

MySqlDataReader reader = myCommand.ExecuteReader();

if (reader.Read())
   textBox1.Text = reader["Name"].ToString();

connect.Close();

我正在尝试使用表单文本框(textBox4)中的数据并将该输入传递给 mysql 查询。

该程序的工作原理是用户输入他们的 id 号码,表单将他们的名字输出到另一个文本框 (textBox1)。

当我使用字符串 'input' 或 textBox4.Text 本身时,我收到一条错误消息:“在命令执行期间遇到致命错误。”

但是,如果我在代码本身中手动输入正确的 ID 号,它会返回正确的值

C# 和 mysql 的新手对于任何大错误感到抱歉。

4

2 回答 2

3

这是我在你的情况下会做的:

string connString = "SERVER=;UID=;PASSWORD=;DATABASE=;";
MySqlConnection connect = new MySqlConnection(connString);
MySqlCommand myCommand = connect.CreateCommand();
string input = textBox4.Text;

myCommand.CommandText = "SELECT * FROM project WHERE Id = @input";
myCommand.Parameters.Add("@input", SqlDbType.Int).Value = Convert.ToInt32(textBox4.Text);
connect.Open();

MySqlDataReader reader = myCommand.ExecuteReader();

if (reader.Read())
   textBox1.Text = reader["Name"].ToString();

connect.Close();

正如您在上面的示例中看到的那样,我正在做两件事:

  1. 使用SqlParameter清理输入,并且,
  2. 将“@input”的值转换为数字;这是基于您的问题的假设。

祝你好运,请继续学习!

于 2013-06-21T18:02:45.390 回答
2

事实上,你快到了。您使用的是参数 ( @input) 而不是连接字符串 ( "select .. " + text + " from ..."),这是错误的,原因有很多。

只需告诉您的命令如何替换该参数。我猜它是这样的(不确定MySQL):

myCommand.Parameters.Add("@input", SqlDbType.Int).Value = Convert.ToInt32(textBox4.Text);

请注意,我假设它Id是 type SqlDbType.Int。您可以相应地更改它。

您必须在调用之前myCommand.ExecuteReader()执行此操作。很可能,您会将这一行放在myCommand.CommandText = "...";.

于 2013-06-21T17:55:58.640 回答