【问题标题】:Unable to open connection using a "using var parameterized queries"无法使用“使用 var 参数化查询”打开连接
【发布时间】:2016-03-07 11:16:45
【问题描述】:

我有这种情况:

我有一张名为“Entradas”的桌子和一张名为“Saidas”的桌子。都有 “数据”和“hora”列。考虑到这一点,由于“数据”和 “entradas”的“hora”列表示在该日期加入的汽车,并且 时间,以及“saidas”的“data”和“hora”列中的值 当我单击按钮时插入,插入当前 日期和时间。我正在请求一个可以插入的 sql 语法 将“data”和“hora”值放入表“saidas”并更新值 “entradas”称为“sai”,等于 0,我希望它更改为 1 按钮按下。

我有这个程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `entradas_sai`(
IN ID_VEICULO VARCHAR(45), OUT retcode INT)
BEGIN
    DECLARE _rollback BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1;
    START TRANSACTION;
    INSERT INTO SAIDAS(data, hora) VALUES(date(now()) ,time(now()));
    UPDATE ENTRADAS SET SAI=1;
    IF '_rollback' THEN
        SET retcode = 0;
        ROLLBACK;
    ELSE
        SET retcode = 1;
        COMMIT;
    END IF;
END

这是我在单击按钮时运行它的实际代码:

private void cmdSaida_Click(object sender, EventArgs e)
        {

            using (var cn = new MySqlConnection("server=localhost;user id=root;password=12345;persistsecurityinfo=True;database=portaria;allowuservariables=True"))
            {
                cn.Open();

                    MySqlCommand cmd = new MySqlCommand(); 
                    cmd.CommandText = "entradas_sai";
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.AddWithValue("@ID_veiculo", Grid1.SelectedCells[1].Selected);
                    cmd.Parameters["@id_veiculo"].Direction = ParameterDirection.Input;

                    cmd.Parameters.AddWithValue("@retcode", MySqlDbType.Int32);
                    cmd.Parameters["@retcode"].Direction = ParameterDirection.Output;

                    cmd.ExecuteNonQuery();
                    var res = cmd.Parameters["@retcode"].Value;

                cn.Close();
             }              
        }

我目前的问题是,当我单击按钮时,它不会执行我的程序,也不会执行我打开或关闭连接的命令。有什么建议吗?

编辑:经过一些研究,我发现我的实际程序在“sai”列中将所有值设置为 0 到 1,我该怎么做,所以它只根据“ID_Entrada”更改选定的网格行值

【问题讨论】:

  • 您是否收到任何错误/异常消息?
  • 追踪它时会发生什么?
  • Visual Studio 告诉我的唯一一件事是,必须在执行任何 sql 功能之前打开连接......但我打开它,在断点调试时,它传递给那个点在 cn.Open();并关闭字符串,禁用所有代码...

标签: c# mysql


【解决方案1】:

您有一个MySqlCommand 对象,但它没有与任何连接关联。必须有一个活动连接才能执行命令。

你可以在构造函数上关联它:

MySqlCommand cmd = new MySqlCommand("entradas_sai", cn);

或在构造函数之后:

cmd.Connection = cn;

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2017-03-17
    • 2012-09-26
    相关资源
    最近更新 更多