+ -
当前位置:首页 → 问答吧 → MySQL Connector/NET 临时变量

MySQL Connector/NET 临时变量

时间:2011-10-27

来源:互联网

初学MySQL,想问一个问题,有劳各位。
做一个日志功能,对于每个系统都有两个表,一个Log表,一个Exception表。由于这两个表的表结构是一模一样的,只是表名不一样,于是乎想将表名作为参数传入。

比如:
系统1有两个表,分别是:系统1_Log,系统1_Exception。
系统2有两个表,分别是:系统2_Log,系统2_Exception。
系统3有两个表,分别是:系统3_Log,系统3_Exception。
以此类推。。。。

对于系统1、2、3的Log表的字段和字段类型都是一模一样的,就想写一句SQL,将表名作为参数传递进去就OK。

我写的SQL如下:

SQL code

set @a = '`test`.`tbluser`';
set @t = concat('select * from ', @a, ' where `id` = 1');
prepare col from @t;
execute col;
deallocate prepare col;



这个语句在MySQL Workbench里面已经成功执行了。
不过在代码里面,使用Connector /.NET作为连接器使用的时候,将@a参数在C#代码里面定义好,但是,@t只是一个临时变量,不需要在C#代码里面定义,运行的时候,一直出错,错误说的是:请定义参数@t。

弄了半天,实在不知道应该怎么定义这个参数@t才好。

有劳各位了~~~
我这个参数

作者: jacksonwj   发布时间: 2011-10-27

我把declare也用了,还是报这个错。

Message:Fatal error encountered during command execution.

InnerException:{"Parameter '@t' must be defined."}

作者: jacksonwj   发布时间: 2011-10-27

贴出你的.net 的代码。

作者: ACMAIN_CHM   发布时间: 2011-10-27

我是将SQL语句写在xml文件里面的,自己封装的访问方法,标准的MySQL语句执行完全没有问题。

我的SQL代码如下:

XML code

<DataCommand Name="GetUserFromMySQL">
    <CommandText>
        <![CDATA[
            SET @t = CONCAT('SELECT * FROM ', ?TableName, ' WHERE `ID` = ?ID');
            PREPARE col FROM @t;
            EXECUTE col;
            DEALLOCATE PREPARE col;
        ]]>
    </CommandText>
    <Parameters>
        <Parameter Name="?TableName" DbType="AnsiString" Size="100"/>
        <Parameter Name="?ID" DbType="Int32"/>
    </Parameters>
</DataCommand>



我的C#代码如下:

C# code

[Test]
public void Get()
{
    var dm = new DataManager("GetUserFromMySQL");
    dm.SetParameters("TableName", "tbluser");
    dm.SetParameters("ID", 1);
    var result = dm.ExecuteEntity<UserInfo>();
}

作者: jacksonwj   发布时间: 2011-10-27

相关阅读 更多

热门下载

更多