2012-06-22 69 views
0

我在處理類型轉換的麻煩......問題與類型的轉換

CODE:

public static string isLocalIncidentSubmitted() 
{ 

    string query = "SELECT Submit From [MVCOmar].[dbo].PrideMVCSubmitLog WHERE [email protected]"; 

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

如果你要問一個關於類型轉換的問題,如果您提供有關所涉及類型的更多詳細信息,它將非常有幫助...... –

+0

ReportID只能包含36個字符串。 existingNum的長度也是36個字母,所以問題在於提交 – Bulvak

+0

secondversionDisplayTesting是string類型,Submit列的類型是varchar,最大字符串長度是5. – Bulvak

回答

3

它看起來s就像你的ReportID是SQL中的Guiduniqueidentifier,但你試圖給它一個字符串值。你確定你在查詢中使用了正確的字段嗎?

如果您MyGlobals1.secondversionDisplayTesting是一個字符串,然後做這樣:

Guid g = Guid.Parse(MyGlobals1.secondversionDisplayTesting); 
command.Parameters.AddWithValue("@existingNum", g); 
+0

ReportID是一個唯一標識符和我傳遞的值,existingNum是一個字符串...如果不是字符串什麼,我必須通過existingNum作爲? ReportID是uniqueidentifier類型,但我不知道如何將C#字符串轉換爲唯一標識符@Coding Gorilla – Bulvak

+1

@Nadal http://msdn.microsoft.com/en-us/library/system.guid.parse.aspx – asawyer

+0

@Nadal See我的更新 – CodingGorilla

0

貌似問題不在於你是返回什麼,但SQL您要執行。將try/catch中的return語句全部包裹起來,我相信你會發現對此的確認。你的SQL是你的問題所在。

從MSDN(http://msdn.microsoft.com/en-us/library/ms187942.aspx):將唯一標識符 類型被認爲是一種字符類型的目的從一個字符表達式轉換 ,因此受制於 轉換爲字符類型的截斷規則。也就是說,當 字符表達式被轉換爲 不同大小的字符數據類型時,對於新數據類型太長的值將被截斷 。請參閱示例部分。

示例以下示例將uniqueidentifier值轉換爲char數據類型 。

DECLARE @myid uniqueidentifier = NEWID(); 
SELECT CONVERT(char(255), @myid) AS 'char'; 
0

嘗試使用,而不是.AddWithValue .Add,使您可以指定參數的類型和大小,像這樣:

command.Parameters.Add("@existingNum", SqlDbType.UniqueIdentifier).Value = MyGlobals1.secondversionDisplayTesting;