【发布时间】:2021-11-22 05:40:09
【问题描述】:
我在我的 asp.net WebAPI 上使用存储过程来验证给定输入是否为 GUID。如果是,它将检索一些数据,如果不是,它将“中断”。 我想要做的是添加一些错误/异常处理程序,以防万一出现问题,这样用户就不会看到那些“乱码”的东西。 另外,我想检查一下这个存储过程是否存在于数据库中,所以连接和读取是否正常。
这是我调用此过程的 .net 代码:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
con.Open();
SqlCommand com = new SqlCommand("oid_validation", con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("@oid", id));
V_WEBSEARCH wb = null;
using (SqlDataReader dr = com.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
wb = new V_WEBSEARCH();
wb.name= dr.GetString(dr.GetOrdinal("name"));
wb.lastname= dr.GetString(dr.GetOrdinal("lastname"));
wb.birthday= dr.GetString(dr.GetOrdinal("birthday"));
wb.city= dr.GetString(dr.GetOrdinal("city"));
wb.country= dr.GetString(dr.GetOrdinal("country"));
wb.address= dr.GetString(dr.GetOrdinal("address"));
}
}
else
{
con.Close();
return Ok("error");
}
}
【问题讨论】:
-
为什么不直接将参数设为
uniqueidentifier,然后在传递之前在C# 中进行验证?旁注:您的连接和命令对象应该在using块中 -
不——不要走这条路。这里有很多坏习惯。首先,您不应该使用 PRINT 与应用程序通信。您抛出错误并且不应该仅仅为了将它们转换为“消息”而捕获它们。您使用强类型参数来避免问题。我可以继续,但您需要更好的指南来编写 TSQL 和编写应用程序代码。
-
不是,你声明了
@oid varchar(16),而是声明了@oid uniqueidentifier -
您当前的应用程序参数创建代码实际上是addwithvalue,我们不应该使用它。
-
执行@SMor 的建议并在存储过程中抛出,在 C# 中捕获 SqlException。
标签: sql asp.net sql-server asp.net-mvc