Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从表sql ce server中选择返回0的日期_C#_Sql Server_Windows_Forms_Datetime - Fatal编程技术网

C# 从表sql ce server中选择返回0的日期

C# 从表sql ce server中选择返回0的日期,c#,sql-server,windows,forms,datetime,C#,Sql Server,Windows,Forms,Datetime,我正在用C语言开发一个windows窗体应用程序。我有一个查询,我想在其中选择“从日期到日期”。结果总是0。 My DB是一个.sdf文件,在我的表中有一个datetime字段,将订单日期存储为datetime。现在,我的PC dateformat是10.12.2014, 有人能帮我解释一下为什么会这样吗。。!是否有更好的文件格式保存在本地。?该应用程序将安装在多台PC上,datetime格式会有问题吗。?非常感谢你的帮助。。检查请提供一些代码 internal static DataTable

我正在用C语言开发一个windows窗体应用程序。我有一个查询,我想在其中选择“从日期到日期”。结果总是0。 My DB是一个.sdf文件,在我的表中有一个datetime字段,将订单日期存储为datetime。现在,我的PC dateformat是10.12.2014, 有人能帮我解释一下为什么会这样吗。。!是否有更好的文件格式保存在本地。?该应用程序将安装在多台PC上,datetime格式会有问题吗。?非常感谢你的帮助。。检查请提供一些代码

internal static DataTable SearchItemsInOrders(string searchWord, string table, int minValue, int maxValue, out DataTable dtTable, DateTime dateFrom, DateTime dateTo)
{
    string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
    commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
    commandText += "where A.ItemName='" + searchWord + "' and B.Date >= '" + dateFrom.ToShortDateString() + "' and B.Date <='" + dateTo.ToShortDateString() + "' Order By A.OrderId DESC";

    SqlCeDataAdapter adp = new SqlCeDataAdapter();
    SqlCeConnection con = ConAndData.Con;

    dtTable = new DataTable();
    adp = new SqlCeDataAdapter(commandText, con);
    if (con.State == System.Data.ConnectionState.Closed)
    {
      con.Open();
    }
    adp.Fill(minValue, maxValue, dtTable);
    return dtTable;
}

正如注释中所建议的,您必须使用参数化查询

因此,您的commandText应该如下所示:

string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
commandText += "where A.ItemName=@ItemName and B.Date >= @DateFrom and B.Date <=@DateTo Order By A.OrderId DESC";

这也将防止ToSortDateString产生的不正确日期格式可能导致的问题。

尝试使用此查询

string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
            commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
            commandText += "where A.ItemName='" + searchWord + "' and CONVERT(NVARCHAR(10),B.Date,121) >= CONVERT(NVARCHAR(10),'" + dateFrom.ToString("yyyy-MM-dd") + "',121) and CONVERT(NVARCHAR(10),B.Date,121) <= CONVERT(NVARCHAR(10),'" + dateTo.ToString("yyyy-MM-dd") + "',121) Order By A.OrderId DESC";

希望这有帮助…

请经常使用。这种字符串串接容易受到攻击。首先,我们必须找出0结果背后的原因。首先尝试在没有where条件的情况下运行查询。如果返回了任何行,我们需要更改查询。亲爱的Veera,当我删除where日期时,我会得到记录,但当我将条件设置为date From时,我会得到0个重新记录。亲爱的Soner,请您修改为您的建议。您确定查询会返回任何内容吗?谢谢您的回复,我尝试了您的代码,我发现此错误,从“VarChar”到已知SqlDbType的映射不存在。@如果您使用的是某些特定版本的sql server,则可能应该使用NVarChar或NChar,或者根据您的db类型使用其他类型。有关SqlDbTypeI的详细信息,请参阅。我按照您的建议做了,但仍然获得了0条记录。@Kamiran Ops。我发现我建议的代码中有一个输入错误。最后一个参数值应该是dateTo而不是dateFrom,这意味着最后一行应该是adp.SelectCommand.Parameters。Add@DateTo,SqlDbType.DateTime.Value=dateTo;。因此,如果您只是按原样粘贴该行-这可能是输出中出现0条记录的原因。
string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
            commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
            commandText += "where A.ItemName='" + searchWord + "' and CONVERT(NVARCHAR(10),B.Date,121) >= CONVERT(NVARCHAR(10),'" + dateFrom.ToString("yyyy-MM-dd") + "',121) and CONVERT(NVARCHAR(10),B.Date,121) <= CONVERT(NVARCHAR(10),'" + dateTo.ToString("yyyy-MM-dd") + "',121) Order By A.OrderId DESC";