简单 SQL 命令不适用于特定参数
Simple SQL command wont work on specific parameters
我有一个简单的 SQL 命令,它在某些给定参数下不起作用。
例如,如果 TweetID = 59
和 UserID = 1
它将 return 值;
但是如果 TweetID = 8
和 UserID = 1
它不会 return 值。
有人能找出原因吗?
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;
}
在 Access 数据库中使用 OleDb 时,参数名称将被忽略。您必须按照 Access 期望的顺序提供参数值。如果您 运行 来自 Access 查询设计器的查询 ...
SELECT [ReTweetID] FROM [ReTweet] WHERE [TweetID] = [@TID] AND [UserID] = [@UID]
...您将看到 Access 要求您首先为 [@TID]
提供一个值,然后为 [@UID]
.
提供一个值
但在您的 C# 代码中,您以相反的顺序提供参数值。
然而,可能还有其他事情混淆了这个问题,因为我不明白为什么它在 TweetID = 59 和 UserID = 1 的情况下成功了。只有 table 实际上包含一个TweetID = 1 和 UserID = 59 的行。也许确实如此。但无论哪种方式,我都建议您首先按照 Access 期望的顺序提供参数值,然后查看是否需要进行额外的代码更改。
我有一个简单的 SQL 命令,它在某些给定参数下不起作用。
例如,如果 TweetID = 59
和 UserID = 1
它将 return 值;
但是如果 TweetID = 8
和 UserID = 1
它不会 return 值。
有人能找出原因吗?
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;
}
在 Access 数据库中使用 OleDb 时,参数名称将被忽略。您必须按照 Access 期望的顺序提供参数值。如果您 运行 来自 Access 查询设计器的查询 ...
SELECT [ReTweetID] FROM [ReTweet] WHERE [TweetID] = [@TID] AND [UserID] = [@UID]
...您将看到 Access 要求您首先为 [@TID]
提供一个值,然后为 [@UID]
.
但在您的 C# 代码中,您以相反的顺序提供参数值。
然而,可能还有其他事情混淆了这个问题,因为我不明白为什么它在 TweetID = 59 和 UserID = 1 的情况下成功了。只有 table 实际上包含一个TweetID = 1 和 UserID = 59 的行。也许确实如此。但无论哪种方式,我都建议您首先按照 Access 期望的顺序提供参数值,然后查看是否需要进行额外的代码更改。