我正在为表适配器创建一个看起来像这样的查询
SELECT COUNT(*) FROM Trip WHERE ShipCode = @ShipCode
AND Date < @TodayPlusWeek
事情是这个方法会期望(字符串,字符串)作为参数,我需要它接受 int ( ShipCode )和日期为(日期)
任何想法如何做到这一点?
非常感谢!
答案 0 :(得分:0)
第一部分是设置一对正确类型的变量来保存Sql参数的正确值:
int iShipCode;
DateTime dtTodayPlusWeek;
一旦你有了这个,我们将在你当前的字符串变量上运行TryParse
方法转换成我们的新变量。由于我不知道你方法中的变量名,我将它们归结为(strShipCode,strTodayPlusWeek)。如果TryParse方法失败,您可以为查询设置默认值;我使用0和今天+ 1周。
if (!int.TryParse(strShipCode, out iShipCode)) {
iShipCode = 0;
}
if (!DateTime.TryParse(strTodayPlusWeek, out dtTodayPlusWeek)) {
dtTodayPlusWeek = DateTime.Now.AddDays(7);
}
现在我们有了正确的数据类型,我们可以将它作为参数添加到现有查询中。
StringBuilder sbCmd = new StringBuilder();
sbCmd.Append("SELECT COUNT(*) ");
sbCmd.Append("FROM Trip ");
sbCmd.Append("WHERE (ShipCode = @ShipCode) ");
sbCmd.Append("AND Date < @TodayPlusWeek");
string txtCmd = sbCmd.ToString();
int iQryReturn;
using (SqlCommand cmd = new SqlCommand(txtCmd, conn)) {
cmd.CommandType = CommandType .Text;
cmd.Parameters.AddWithValue("@ShipCode", iShipCode;);
cmd.Parameters.AddWithValue("@TodayPlusWeek", dtTodayPlusWeek);
try {
conn.Open();
iQryReturn = (int)cmd.ExecuteScalar();
}
catch(Exception ex) {
iQryReturn = -1;
// Your Exception handling here
}
finally {
conn.Close();
// Your cleanup code if any
}
}
我不知道您使用的是什么类型的数据库设置,我已经在ADO for Sql Server中编写了这个。广告只会返回值; count(*),我为返回添加了一个整数变量。如果有错误,该值将设置为-1。
由您来决定特定应用程序可能需要的实现和语法更改。