2017-10-17 62 views
0

我在C#中構建遞歸函數來調用一組存儲過程(我不想爲每個存儲過程構建一個調用函數)。其中一個參數是uniqueidentifier。但是,如果我發送使用錯誤的類型(例如字符串)的參數,我得到一個異常:如何在調用存儲過程之前將DbType.Guid驗證爲有效參數?

錯誤轉換數據類型爲nvarchar爲uniqueidentifier

我如何檢查參數被髮送到存儲過程是一個DbType.Guid

這是我的電話功能,而如果檢測作業可以做之前調用存儲過程,這將是最好的解決辦法:

public SqlDataReader GetDataFromDB(string Cmdtext, CommandType CmdType) 
{ 
    _conString = WebConfigurationManager.ConnectionStrings["db_ConnectionString"].ConnectionString; 

    // Create Connection 
    SqlConnection con = new SqlConnection(_conString); 

    // Create Command 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = Cmdtext; 
    cmd.CommandType = CmdType; 

    //// Create ADO.NET parameters 
    cmd.Parameters.AddWithValue("@User", _User); 

    if (Cmdtext == "SpecificStoredProcedure") 
    { 
     cmd.Parameters.AddWithValue("@mGUID", _mGUID); 
    } 

    //// Return DataReader 
    con.Open(); 

    return cmd.ExecuteReader(CommandBehavior.CloseConnection); 
} 
+0

你能不能檢查,如果之前的GUID和或字符串包含' - '如果你真的要確保檢查,看是否有至少4'-'?並傳入'_mGUID'作爲參數,並檢查以及我將重構你在做GUID的位置檢查或使條件檢查的一部分與存儲過程名稱一起使用存儲過程名稱與其他參數一起使用.. – MethodMan

回答

0
  • 使用Guid.TryParseGuid.Parse

  • 創建一個幫助器方法,在其中創建一個帶字符串的新Guid,
    如果成功,則返回true,捕獲該異常並返回false如果
    例外

    try 
    { 
        Guid guid = new Guid(data) 
        return true; 
    } 
    catch(Exception) 
    { 
        return false; 
    } 
    
+0

謝謝,你說的很好。 – KingofDendroar

+0

請將此標記爲答案。 – Viju

相關問題