我注册的主机暂时不支持使用C# ASP NET的MySql.Data.MySqlClient,他们不能说什么时候可以。
FAQ建议使用MySQL ODBC 5.2 UNICODE Driver连接我的mysql数据库,执行存储过程。
我过去从未使用过这种类型的ODBC连接,实际上我得到的是空返回。
sProc的输出值为空。
MySQL数据库上的存储过程,使用phpmyAdmin,工作正常。
sProc的输出值为3。
我在网上找到了很多不同的建议,但都没有解决我的问题。
如何解决这个问题?
我的代码如下。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.Odbc;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
try
{
using (OdbcConnection connection =
new OdbcConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString))
{
using (OdbcCommand cmd =
new OdbcCommand("{Call s_sproc(?,?)}", connection))
{
cmd.Connection.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@pin_dd", DateTime.Now.ToString("dd"));
cmd.Parameters.AddWithValue("@out_userid", OdbcType.Char).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
if (cmd.Parameters["@out_userid"].Value != DBNull.Value)
{
int number = Convert.ToInt32(cmd.Parameters["@out_userid"].Value);
if (number > 0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert",
"alert('" + number.ToString() + "');", true);
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert",
"alert('null');", true);
}
}
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
}
}
}
}
DELIMITER $$
CREATE DEFINER=`Sql_user`@`%` PROCEDURE `s_sproc`(
IN `pin_dd` VARCHAR(255),
OUT `out_userid` VARCHAR(255))
BEGIN
SET @out_userid := NULL;
SET @s = CONCAT('SELECT DAY(t_Date) from t_table WHERE DAY(t_Date) = ',pin_dd,' INTO @out_userid;');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE `stmt`;
SET out_userid := @out_userid;
SELECT @out_userid;
END$$
DELIMITER ;
@out_userid
3
更新#01 -- Solution @AnandSowmithiran
try
{
using (OdbcConnection connection =
new OdbcConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString))
{
using (OdbcCommand cmd =
new OdbcCommand("{Call s_sproc(?,?)}", connection))
{
cmd.Connection.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add("@pin_dd", OdbcType.VarChar, 100);
cmd.Parameters["@pin_dd"].Value = DateTime.Now.ToString("dd");
cmd.Parameters.Add("@out_userid", OdbcType.VarChar, 100);
cmd.Parameters["@out_userid"].Direction = ParameterDirection.Output;
string getValue = cmd.ExecuteScalar().ToString();
if (!String.IsNullOrEmpty(getValue))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert",
"alert('" + getValue.ToString() + "');", true);
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert",
"alert('null');", true);
}
cmd.Connection.Close();
}
}
}
catch (Exception ex)
{
throw new ApplicationException("operation failed!", ex);
}
finally
{
}
1条答案
按热度按时间czq61nw11#
这里是要做的更改,以使其工作,
1.通过调用Parameters集合
Add
方法而不是AddWithValue()将Parameters添加到存储过程。1.提及
string
类型化参数中的size
1.您应该使用
ExecuteScalar
而不是ExecuteNonQuery