我正在使用Visual Studio 2017开发一个报告网站。我所有的MYSQL查询都已参数化并且工作正常。问题出在一些具有EXECUTE命令的查询中。
例如:
而不是
SELECT * FROM tabla WHERE id=@id
我已经把
了set @sentencia='SELECT * FROM tabla WHERE id=@id'
PREPARE stmt FROM @sentencia;
EXECUTE stmt using @id;
DEALLOCATE PREPARE stmt;
执行案例不会中断但不起作用,因为不返回任何数据。
我试过这个:
set @sentencia='SELECT * FROM tabla WHERE id=?'
PREPARE stmt FROM @sentencia;
EXECUTE stmt using @id;
DEALLOCATE PREPARE stmt;
但它不起作用。错误消息是:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 '16附近; DEALLOCATE PREPARE stmt'在第1行
16对应于我在代码中给参数@id赋予的值。
Dim myConnectionMYSQL As New MySql.Data.MySqlClient.MySqlConnection
myConnectionMYSQL.ConnectionString = CadenaDeConexion()
myConnectionMYSQL.Open()
Dim myCommandMYSQL As New MySql.Data.MySqlClient.MySqlCommand(_Sentencia, myConnectionMYSQL)
myCommandMYSQL.CommandTimeout = 9000
myCommandMYSQL.Parameters.Add("@id", SqlDbType.Int, 100)
myCommandMYSQL.Parameters("@id").Value = 16
Dim daMYSQL As New MySql.Data.MySqlClient.MySqlDataAdapter(myCommandMYSQL)
Dim dtMYSql As New DataTable
daMYSQL.Fill(dtMYSql)
任何人都知道可能的解决方案? 非常感谢!
答案 0 :(得分:1)
试一试......
PREPARE stmt FROM 'SELECT * FROM tabla WHERE id=?';
SET @id= 'YOURID';
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;
在您的示例中,您 不 设置id
。应该是......
SET @id = 'SOMEID';