【发布时间】:2015-07-01 13:09:19
【问题描述】:
我有一个应用程序 C# 连接并在数据库中做一些事情,所以我需要在表中找到一个序列号并返回它,我这样做了,但我有一个问题:
public int Select_Begin(string serial)
{
string query = "SELECT serial FROM `compteur_mono` WHERE serial = " + serial + ";";
//Open connection
MySqlCommand cmd = new MySqlCommand(query, connection);
if (this.OpenConnection() == true)
{
int numero = cmd.ExecuteNonQuery();
return numero;
}
else
{
return 0;
}
}
当我执行结果总是 -1 但是当我这样做时:
public string Select_Begin(string serial)
{
string query = "SELECT serial FROM `compteur_mono` WHERE serial = " + serial + ";";
//Open connection
MySqlCommand cmd = new MySqlCommand(query, connection);
if (this.OpenConnection() == true)
{
string serial = cmd.ExecuteNonQuery();
return serial;
}
else
{
return null;
}
}
出现此错误:错误 1 无法将类型 'int' 隐式转换为 'string'
请提供一些帮助,我不会使用 dataReader,因为我只有一个序列号可以返回它:* 谢谢
【问题讨论】:
-
不要使用全局连接,通常最好在您使用它的方法中创建连接,最好使用
using语句以确保它正确关闭。您不必担心它的效率较低。连接池(默认)则相反。 -
我的序列号可以是
x'; DROP TABLE compteur_mono; --吗?? -
如果开发人员 2 认为该方法有用,即使不是今天也可能是明天。所以永远不要连接字符串,而是使用 sql-parameters。
-
另一个有趣的问题:
serial在表中是唯一的吗?可以有多个匹配项吗? -
也不清楚您对该方法的期望。是否要检查该序列是否已存在于表中?然后使用
SELECT COUNT(*)....和ExecuteScalar或SELECT CASE WHEN EXISTS... THEN 1 ELSE 0,如果表很大,效率会更高。