gpt4 book ai didi

c# - 这是防御性代码还是有可能遇到问题?

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:38 35 4
gpt4 key购买 nike

我有以下代码连接到数据库 > 运行存储过程 > 然后继续。

我相信数据库编程很容易出错,所以防御很重要:以下是防御性的吗? (还是可以改进?)

public int RunStoredProc()
{
SqlConnection conn = null;
SqlCommand dataCommand = null;
SqlParameter param = null;
int myOutputValue;

try
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
conn.Open();
dataCommand = conn.CreateCommand();
dataCommand.CommandType = CommandType.StoredProcedure;
dataCommand.CommandText = "pr_blahblah";
dataCommand.CommandTimeout = 200; //seconds
param = new SqlParameter();
param = dataCommand.Parameters.Add("@NumRowsReturned", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
dataCommand.ExecuteNonQuery();
myOutputValue = (int)param.Value;

return myOutputValue;
}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex.Number.ToString(), "Error StoredProcedure");
return 0;
}
finally
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
}

代码现在如下所示

我已经尝试使用每个人提供的所有帮助,并且上面的代码现在已经修改为以下代码,我希望它现在足够防御:

public SqlConnection CreateConnection()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
return conn;
}
public int RunStoredProc()
{
using (var conn = CreateConnection())
using (var dataCommand = conn.CreateCommand())
{
conn.Open();
dataCommand.CommandType = CommandType.StoredProcedure;
dataCommand.CommandText = "pr_BankingChargebacks";
dataCommand.CommandTimeout = 200; //5 minutes
SqlParameter param = new SqlParameter();
param = dataCommand.Parameters.Add("@NumRowsReturned", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
dataCommand.ExecuteNonQuery();
int myOutputValue = (int)param.Value;

return myOutputValue;

}
}

最佳答案

尝试使用 using 结构来处理这些事情。

using(var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString)
{
}

一旦你这样做,我认为你将处于正确的“防御”水平。类似地尝试对任何必须处理的东西做同样的事情(比如命令)

关于c# - 这是防御性代码还是有可能遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687146/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com