我在处理类型转换方面遇到了麻烦......
CODE:
public static string isLocalIncidentSubmitted()
{
string query = "SELECT Submit From [MVCOmar].[dbo].PrideMVCSubmitLog WHERE ReportID=@existingNum";
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(connectionStr4);
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@existingNum", MyGlobals1.secondversionDisplayTesting);
connection.Open();
SqlDataAdapter adp = new SqlDataAdapter(command);
adp.Fill(dt);
connection.Close();
command.Dispose();
connection.Dispose();
return dt.Rows[0]["Submit"].ToString();
}
表格提交的类型为varchar
我收到一个很大的错误,但这里有几行:
System.Data.SqlClient.SqlException: Conversion failed when converting from a character string to uniqueidentifier. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.HasMoreRows()
答案 0 :(得分:3)
您的ReportID
在SQL中似乎是Guid
或uniqueidentifier
,但您尝试为其提供字符串值。您确定在该查询中使用了正确的字段吗?
如果您的MyGlobals1.secondversionDisplayTesting
是字符串,请执行以下操作:
Guid g = Guid.Parse(MyGlobals1.secondversionDisplayTesting);
command.Parameters.AddWithValue("@existingNum", g);
答案 1 :(得分:0)
看起来问题不在于您要返回的内容,而在于您尝试执行的SQL。在try / catch中包装除return语句之外的所有内容,我相信你会找到对此的确认。您的SQL就是您的问题所在。
来自MSDN(http://msdn.microsoft.com/en-us/library/ms187942.aspx): uniqueidentifier类型被认为是用于此目的的字符类型 从字符表达式转换,因此受制于 转换为字符类型的截断规则。那就是 字符表达式转换为a的字符数据类型 不同的大小,对于新数据类型来说太长的值是 截断。请参阅示例部分。
示例以下示例将uniqueidentifier值转换为a char数据类型。
DECLARE @myid uniqueidentifier = NEWID();
SELECT CONVERT(char(255), @myid) AS 'char';
答案 2 :(得分:0)
尝试使用.Add代替.AddWithValue,以便您可以指定参数的类型和大小,如下所示:
command.Parameters.Add("@existingNum", SqlDbType.UniqueIdentifier).Value = MyGlobals1.secondversionDisplayTesting;