【发布时间】:2026-01-03 01:00:01
【问题描述】:
C# mySQL ODBC 的问题 我的桌子
CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fbid` varchar(30) NOT NULL,
`fbname` varchar(80) NOT NULL,
`datecreate` datetime NOT NULL,
`ipcreate` varchar(20) NOT NULL,
`datelogin` datetime NOT NULL,
`iplogin` varchar(20) NOT NULL,
`xstatus` int(2) NOT NULL,
`xverstion` int(5) NOT NULL,
`xdata` text NOT NULL,
`xitem` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
我的程序:
CREATE PROCEDURE `VVVVV_getUserByFbId`(fbid2 varchar(30))
BEGIN
SELECT * from vvvvv_account where vvvvv_account.fbid=fbid2 LIMIT 1;
END
fbid2 是参数 (=408301576730032) 在 C# 代码中
OdbcConnection connection = new OdbcConnection(constr);
OdbcCommand cmd;
DataTable dt = new DataTable();
try
{
OpenConnection(connection);
cmd = new OdbcCommand("{call VVVVV_getUserByFbId(?)}", connection);
cmd.Parameters.AddWithValue("@fbid2", "408301576730032");
cmd.CommandType = CommandType.StoredProcedure;
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
da.Fill(dt);
da.Dispose();
}
catch (Exception ex)
{
}
finally
{
CloseConnection(connection);
}
return dt;
C# 输出
dt.Rows[0]["id"] 总是 = 0 不好
dt.Rows[0]["fbname"] = "ABC" 好的
表示我仍然可以正常从数据库中获取数据。但是 int column alway = 0, varchar, datetime colume 是可以的;
但如果我将程序更改为:
BEGIN
select * from account where account.fbid='408301576730032' LIMIT 1;
END
在 C# 中"{call VVVVV_getUserByFbId()}" -> id field = 3903
如果没有参数 (fbid2) 或没有文本字段 (xdata, xitem) -> id, xstatus (int fields) 返回正常。但是如果传入参数或者选择xdata -> id (int fields) always = 0;
【问题讨论】:
-
C# mySQL ODBC 问题
-
嘿,你能描述一下你的问题吗?我的理解是如果没有参数返回 id 否则返回 0。对吗?
-
1.我的程序 BEGIN select * from account where account.fbid=fbid2 LIMIT 1; END fbid2 是参数 这是否意味着:在 C# 中 if "{call VVVVV_getUserById(?)}" -> id field get value always = 0 2. 但是如果过程 BEGIN select * from account where account.fbid='408301576730032' LIMIT 1; END 在 C# "{call VVVVV_getUserById()}" -> id field = 3903
-
谢谢,现在我更好地理解了这个问题。