C#将TableAdapter Query @parameter添加为int和date?

时间:2017-05-08 16:47:37

标签: c# sql tableadapter

我正在为表适配器创建一个看起来像这样的查询

SELECT COUNT(*) FROM Trip WHERE ShipCode = @ShipCode 
                           AND Date < @TodayPlusWeek

事情是这个方法会期望(字符串,字符串)作为参数,我需要它接受 int ShipCode )和日期为(日期

任何想法如何做到这一点?

非常感谢!

1 个答案:

答案 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。

由您来决定特定应用程序可能需要的实现和语法更改。