MySQL System.FormatException:输入字符串的格式不正确
目前,我正在使用ASP.NET MVC3和MySQL创建一个应用程序,当我尝试从数据库检索用户的名字时,我收到一个System.FormatException:输入字符串的格式不正确 这是我的代码:MySQL System.FormatException:输入字符串的格式不正确,mysql,asp.net-mvc,Mysql,Asp.net Mvc,目前,我正在使用ASP.NET MVC3和MySQL创建一个应用程序,当我尝试从数据库检索用户的名字时,我收到一个System.FormatException:输入字符串的格式不正确 这是我的代码: public string GetUserFirstName(UInt64 id) { DBConnections databaseCnnString = new DBConnections(); string connectionString = "server=123.123.com
public string GetUserFirstName(UInt64 id)
{
DBConnections databaseCnnString = new DBConnections();
string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef";
MySqlConnection cnn = new MySqlConnection(connectionString);
try
{
cnn.Open();
string sp_GetFName = "SP_GET_FNAME";
MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("id", id);
cmd.Parameters["id"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("first_name", MySqlDbType.VarChar);
cmd.Parameters["first_name"].Direction = ParameterDirection.Output;
object result = cmd.ExecuteScalar();
if (result != null)
{
string fname = Convert.ToString(result);
return fname;
}
else
{
string fname = "friend";
return fname;
}
}
catch (Exception ex)
{
throw (ex);
}
finally
{
cnn.Close();
cnn.Dispose();
}
}
这是MySQL存储过程:
CREATE DEFINER=`0001`@`%` PROCEDURE `SP_GET_FNAME`(IN id BIGINT(20), OUT first_name VARCHAR(60))
BEGIN
DECLARE user_id BIGINT(20) DEFAULT id;
DECLARE output VARCHAR(60);
SELECT `FName` FROM `users` WHERE USERID=user_id INTO output;
SET first_name = output;
END
问题似乎是在执行cmd.ExecuteScalar()时
我这里有什么问题
提前谢谢你 我猜找不到用户或者fname为null 我真的希望您不是在为每个用户列查询数据库
祝你好运。我猜找不到用户或者fname为空 我真的希望您不是在为每个用户列查询数据库
祝你好运。我复制粘贴错误。正常工作的正确代码是:
public string GetUserFirstName(UInt64 id)
{
DBConnections databaseCnnString = new DBConnections();
string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef";
MySqlConnection cnn = new MySqlConnection(connectionString);
try
{
cnn.Open();
string sp_GetFName = "SP_GET_FNAME";
MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("id", id);
cmd.Parameters["id"].Direction = ParameterDirection.Input;
cmd.Parameters.Add(new MySqlParameter("first_name", MySqlDbType.VarChar));
cmd.Parameters["first_name"].Direction = ParameterDirection.Output;
cmd.ExecuteScalar();
string fname = Convert.ToString((cmd.Parameters["first_name"].Value));
return fname;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
cnn.Close();
cnn.Dispose();
}
}
更正:cmd.Parameters.Add(新的MySqlParameter(“first_name”,MySqlDbType.VarChar));
NOT:cmd.Parameters.AddWithValue(“first_name”,MySqlDbType.VarChar)
在我的例子中,user表中的FNAME字段不能为NULL;因此,无需检查代码中返回的空值。复制粘贴错误。正常工作的正确代码是:
public string GetUserFirstName(UInt64 id)
{
DBConnections databaseCnnString = new DBConnections();
string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef";
MySqlConnection cnn = new MySqlConnection(connectionString);
try
{
cnn.Open();
string sp_GetFName = "SP_GET_FNAME";
MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("id", id);
cmd.Parameters["id"].Direction = ParameterDirection.Input;
cmd.Parameters.Add(new MySqlParameter("first_name", MySqlDbType.VarChar));
cmd.Parameters["first_name"].Direction = ParameterDirection.Output;
cmd.ExecuteScalar();
string fname = Convert.ToString((cmd.Parameters["first_name"].Value));
return fname;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
cnn.Close();
cnn.Dispose();
}
}
更正:cmd.Parameters.Add(新的MySqlParameter(“first_name”,MySqlDbType.VarChar));
NOT:cmd.Parameters.AddWithValue(“first_name”,MySqlDbType.VarChar)
在我的例子中,user表中的FNAME字段不能为NULL;因此,无需检查代码中返回的空值。附加注释。
尝试返回字符串值时,AddWithValue似乎试图将字符串输出转换为数字。这将导致字符串格式异常。附加注释。
尝试返回字符串值时,AddWithValue似乎试图将字符串输出转换为数字。这将导致字符串格式异常。哈哈。。。不用户就在那里,我没有查询数据库中的每个用户列。如果我直接使用Workbench执行查询,它将返回一个值,这就是我要寻找的。哈哈。。。不用户就在那里,我没有查询数据库中的每个用户列。如果我直接使用Workbench执行查询,它将返回一个值,这就是我要寻找的。