【发布时间】:2016-05-17 13:54:43
【问题描述】:
我有一个简单的 SQL 命令,它在某些给定参数中不起作用。
例如,如果 TweetID = 59 和 UserID = 1 它将返回值;
但如果TweetID = 8 和UserID = 1 不会返回值。
有人能找到原因吗?
public static int GetReTweetIdFromReTweetByUserIdAndTweetId(int TweetID,int UserID)
{
string sql = "SELECT [ReTweetID] FROM [ReTweet] WHERE [TweetID] = [@TID] AND [UserID] = [@UID]";
OleDbConnection conn = ConnectToDb();
OleDbCommand com = new OleDbCommand(sql, conn);
com.Parameters.Clear();
OleDbParameter objParamater;
objParamater = com.Parameters.Add("[@UID]", OleDbType.Integer);
objParamater.Direction = ParameterDirection.Input;
objParamater.Value = UserID;
objParamater = com.Parameters.Add("[@TID]", OleDbType.Integer);
objParamater.Direction = ParameterDirection.Input;
objParamater.Value = TweetID;
OleDbDataAdapter da = new OleDbDataAdapter(com);
DataTable dt = new DataTable();
int id=0;
try
{
conn.Open();
da.Fill(dt);
id = int.Parse(dt.Rows[0][0].ToString());
}
catch (Exception err)
{
throw err;
}
finally
{
da.Dispose();
dt.Dispose();
com.Dispose();
conn.Close();
conn.Dispose();
}
return id;
}
【问题讨论】:
-
离题:查看using statement。它可以大量清理您的代码,并省去在
IDisposable对象上调用Dispose()的麻烦。 -
不要在你的 catch 块中
throw err,因为这会重置堆栈跟踪。要么只是做一个throw,要么完全摆脱 catch 块,因为你在浪费你的时间。 -
如果直接对数据库运行脚本,它会返回结果吗?
-
@Rokni 你看过我发布的链接了吗?对于实现
IDisposable接口的类的实例,您可以用一行using语句替换try...catch...finally块。using语句只是try...catch...finally块的简写,它在finally块中为using语句中指定的实例调用Dispose()。这是链接:dotnetperls.com/using
标签: c# sql .net ms-access ado.net