我正在尝试从我的数据库返回一个字符串值,但是查询返回“0”,尽管SELECT查询的目标是nvarchar列。 查询有效并正确运行,在使用SQL-SMS运行时返回“KYO”。
这个方法在我使用它的其他地方按预期工作,我用它来返回数据:
public static object GetData(string sql, SqlParameter[] parameters)
{
try
{
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = factory.CreateCommand())
{
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = sql;
if (parameters != null)
{
foreach (var parameter in parameters)
{
if (parameter != null)
command.Parameters.Add(parameter);
}
}
object result = null;
SqlParameter returnValue = new SqlParameter("ReturnValue", result);
returnValue.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(returnValue);
connection.Open();
command.ExecuteScalar();
result = command.Parameters["ReturnValue"].Value;
return result;
}
}
}
catch (Exception)
{
throw;
}
}
}
这是抛出强制转换异常的方法,因为它返回的是int而不是字符串:
private static String GetManufacturerCode(Int32 manufacturerID)
{
try
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT ManufacturerCode FROM Manufacturers WHERE ManufacturerID = @ID");
SqlParameter id = new SqlParameter("@ID", manufacturerID);
return(String)DB.GetData(sql.ToString(), new[] { id });
}
catch (Exception)
{
throw;
}
}
我还将returnValue.DbType = DbType.String;
设置为测试,但仍然返回一个整数。
我成功使用GetData(...)
方法的一个例子是:
public static Int32 GetMonitoredCount()
{
try
{
String GetMonitoredCount = "SELECT COUNT(*) FROM Devices WHERE Monitored = 1 ";
return (Int32)DB.GetData(GetMonitoredCount, null);
}
catch (Exception)
{
throw;
}
}
我认为它可能会返回一个布尔位,但是当我的查询正确执行时,我认为它会返回1而不是0.
为什么返回一个整数?如何使用我的模式返回一个字符串?
答案 0 :(得分:4)
ReturnValue
总是返回int - 这是设计的。
而不是整个块
object result = null;
SqlParameter returnValue = new SqlParameter("ReturnValue", result);
returnValue.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(returnValue);
connection.Open();
command.ExecuteScalar();
result = command.Parameters["ReturnValue"].Value;
尝试
connection.Open();
object result = command.ExecuteScalar();
这将返回您的SQL语句的真实结果
方法ExecuteScalar本身能够返回值 - 它返回结果集第一行的第一列,并且在查询返回单个值时非常理想。