2017-10-17 61 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

相关问题