类型转换问题

时间:2012-06-22 18:55:57

标签: c# sql

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

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()

3 个答案:

答案 0 :(得分:3)

您的ReportID在SQL中似乎是Guiduniqueidentifier,但您尝试为其提供字符串值。您确定在该查询中使用了正确的字段吗?

如果您的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;