MySQL Connector / NET存储过程表名

时间:2013-01-29 07:19:22

标签: mysql stored-procedures mysql-connector tablename

当我在C#应用程序中使用MySQL Connector / NET时,我使用ExecuteReader方法和DataTable上的Extention来调用存储过程来填充它。这是代码:

            using (IDataReader reader = db.ExecuteReader(cmd))
            {
                DataTable dt;
                while (!reader.IsClosed)
                {
                    dt = new DataTable();
                    Extensions.Fill(dt, reader, true);
                    ds.Tables.Add(dt);
                } if(!reader.IsClosed) reader.NextResult();
            }

延伸:

public static class Extensions
{
    #region Extensions
    public static void Fill(this DataTable table, IDataReader reader, bool createColumns)
    {
        if (createColumns)
        {
            table.Columns.Clear();
            var schemaTable = reader.GetSchemaTable();
            foreach (DataRowView row in schemaTable.DefaultView)
            {
                var columnName = (string)row["ColumnName"];
                var type = (Type)row["DataType"];
                table.Columns.Add(columnName, type);
            }
        }
        table.Load(reader);
    }

    #endregion

这段代码的问题是,如果你从同一个表名中选择两次,你就不知道它在数据集中得到了哪个名字(可能是一个错误,因为同一个表名被用了两次。 例如,存储过程:

CREATE PROCEDURE `test`.`mytestproc` ()
BEGIN
    SELECT NOW() FROM DUAL;
    SELECT NOW() FROM DUAL;
END

扩展可能会两次看到相同的表名(' DUAL')。我不想在我的程序中提示表名是什么,我尝试了以下内容:

CREATE PROCEDURE `test`.`mytestproc` ()
BEGIN
    SELECT * FROM (SELECT NOW() FROM DUAL) a;
    SELECT * FROM (SELECT NOW() FROM DUAL) b;
END

但这不起作用。有解决方法吗?

0 个答案:

没有答案