0

我在处理类型转换时遇到了麻烦...

代码:

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:从字符串转换为唯一标识符时转换失败。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlDataReader.HasMoreRows()
4

3 回答 3

3

看起来你ReportID是 SQL 中的Guidor uniqueidentifier,但你试图给它一个字符串值。您确定您在该查询中使用了正确的字段吗?

如果你MyGlobals1.secondversionDisplayTesting是一个字符串,那么这样做:

Guid g = Guid.Parse(MyGlobals1.secondversionDisplayTesting);
command.Parameters.AddWithValue("@existingNum", g);
于 2012-06-22T18:58:56.730 回答
0

尝试使用.Add而不是 .AddWithValue 以便您可以指定参数的类型和大小,如下所示:

command.Parameters.Add("@existingNum", SqlDbType.UniqueIdentifier).Value = MyGlobals1.secondversionDisplayTesting;
于 2012-06-22T19:06:44.960 回答
0

看起来问题不在于您返回的内容,而在于您尝试执行的 SQL。将除 return 语句之外的所有内容都包装在 try/catch 中,我相信您会找到对此的确认。您的 SQL 就是您的问题所在。

来自 MSDN (http://msdn.microsoft.com/en-us/library/ms187942.aspx):uniqueidentifier 类型被视为用于从字符表达式转换的字符类型,因此受截断规则的约束用于转换为字符类型。也就是说,当字符表达式转换为不同大小的字符数据类型时,对于新数据类型来说太长的值将被截断。请参阅示例部分。

示例 下面的示例将 uniqueidentifier 值转换为 char 数据类型。

 DECLARE @myid uniqueidentifier = NEWID();
 SELECT CONVERT(char(255), @myid) AS 'char';
于 2012-06-22T19:04:32.267 回答