C#SqlDbType.Datetime获取空行

时间:2013-05-09 07:44:34

标签: c# sql-server-2008 datetime report sqldataadapter

我开发了一个库存管理应用程序。它已经使用了差不多1年。但我决定测试一些报告,所以我备份了在SQL Server 2008 express中运行的数据库。当我在我的电脑上运行应用程序时,我得到空行,但是当我在商店中运行时,我得到结果,如果我删除日期时间范围,它会给我数据。

我使用报告的下一个代码:

frmReporteSurtido repmi = new frmReporteSurtido();
 string query = "SELECT * from [SAIV].[dbo].Vista_MovInv ";

query = query + "WHERE (FechaHora BETWEEN  @Horai AND @Horaf ) and idTiposdeMovimiento=1 and Concepto='TRANSFERENCIA DE ALMACÉN'";

            if (!cbTS.Checked)
                query = query + " AND SUCURSAL='" + idSucursalesComboBox.Text + "' ";
            if (!cbTA.Checked)
                query = query + " AND ALMACÉN='" + idAlmacenesComboBox.Text + "' ";
            if (!cbTU.Checked)
                query = query + " AND UBICACIÓN='" + comboBox1.Text + "' ";

            this.DSTCON.Vista_MovInv.Clear();
            try
            {
                SqlConnection conn = new SqlConnection(clsData.strConexion);
                SqlDataAdapter adapter = new SqlDataAdapter();

                adapter.SelectCommand = new SqlCommand(query, conn);
                DateTime d1 = new DateTime(dateTimePicker1.Value.Year, dateTimePicker1.Value.Month, dateTimePicker1.Value.Day, 00, 00, 00);
                DateTime d2 = new DateTime(dateTimePicker2.Value.Year, dateTimePicker2.Value.Month, dateTimePicker2.Value.Day, 23, 59, 59);
                adapter.SelectCommand.Parameters.Add("@Horai",SqlDbType.DateTime).Value= d1;
                adapter.SelectCommand.Parameters.Add("@Horaf",SqlDbType.DateTime).Value=d2;
                adapter.Fill(DSTCON.Vista_MovInv);
            }
            catch (Exception ec) { DataControl.Guardar_Error(ec, this.Name); }

            repmi.crptSurtido1.SetDataSource(this.DSTCON);
            repmi.MdiParent = this.MdiParent;
            repmi.Show();

我认为这是一个约会时间问题,但我找不到它。两个服务器(一个在商店,另一个在我家)具有相同的排序规则。我也改变了我的家庭服务器和myu pc中的区域设置,但没有任何反应。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

:(太傻了。

错误在于:

string query = "SELECT * from [SAIV].[dbo].Vista_MovInv ";

我将备份命名为我恢复如下:

[SAIV_TAM];

所以我试图从数据库中获取信息,而不是新数据。

此外,我修改库存的存储过程指向我的开发数据库而不是备份,并且由于我工作场所和我家的数据库具有相同的名称,我在重命名时会遇到问题。

感谢您的帮助,对不起我的愚蠢。

答案 1 :(得分:0)

也许你的PC与数据库有不同的日期时间(语言)格式。你应该将datetime formate改为'yyyy-MM-dd'。

答案 2 :(得分:0)

更改以下行:

adapter.SelectCommand.Parameters.Add("@Horai",SqlDbType.DateTime).Value= d1;
adapter.SelectCommand.Parameters.Add("@Horaf",SqlDbType.DateTime).Value=d2;

adapter.SelectCommand.Parameters.Add("@Horai",SqlDbType.DateTime).Value= new SqlDateTime(d1);
adapter.SelectCommand.Parameters.Add("@Horaf",SqlDbType.DateTime).Value= new SqlDateTeim(d2);