데이터베이스에서 문자열 값을 반환하려고하지만 대신 SELECT 쿼리가 nvarchar 열을 대상으로하고 있지만 쿼리가 "0"을 반환합니다. 쿼리가 유효하고 올바르게 실행되어 SQL-SMS를 사용하여 실행할 때 "KYO"를 반환합니다. 이는 int를 반환 것 같은 캐스트 예외를 던지고하는 방법입니다Int를 반환하는 Nvarchar 열에 대한 SELECT 쿼리
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;
}
}
}
:
이
내가 데이터를 반환에 사용하는, 내가 그것을 사용하는 다른 장소에서 예상대로 작동하는 방법이다 대신 문자열 :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을 반환 생각했다.
정수가 반환되는 이유는 무엇입니까? 내 패턴을 사용하여 문자열을 반환하려면 어떻게해야합니까?