【发布时间】:2018-10-29 09:25:12
【问题描述】:
这段代码在 Try/Catch 方面是否正确?我需要评估操作是否完成以通知用户结果,因此我将获取 bool 值以了解连接是否成功。
public static bool CreateSQLDatabaseTable()
{
var connString = "Server=localhost\\SQLEXPRESS;Integrated Security = SSPI; database = MyDB";
string cmdText = "SELECT count(*) as Exist from INFORMATION_SCHEMA.TABLES where table_name =@Product";
try
{
using (var sqlConnection = new SqlConnection(connString))
{
using (var sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
sqlCmd.Parameters.Add("@Product", System.Data.SqlDbType.NVarChar).Value = "Product";
sqlConnection.Open();
sqlCmd.ExecuteScalar();
if ((int)sqlCmd.ExecuteScalar() != 1)
{
using (SqlCommand command = new SqlCommand("CREATE TABLE Product (Id INT, UserId TEXT, CreationDate TEXT, Name TEXT)", sqlConnection))
{
command.ExecuteNonQuery();
return true;
}
}
}
}
return false;
}
catch
{
return false;
}
}
【问题讨论】:
-
catch 实际上应该捕获一个可能抛出的异常(并对其做一些处理,而不是吞下它)
-
在这个方法调用完成后,我会检查真/假并回复用户。可以吗?
-
另外,不要将
TEXT数据类型用于已弃用的 SQL 列。使用VARCHAR/VARCHAR( MAX ) -
如果调用该方法返回false,如何知道表是否已经存在或者是否抛出异常?
-
@Alex:更好的 NVARCHAR / NVARCHAR(MAX),那么他在国际化方面永远不会有问题。
标签: c# sql sql-server exception-handling try-catch