- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相当复杂的 SQL 查询,它根据客户 ID 从数据库中提取不同类型的产品。它提取三种不同类型的产品,由其唯一标识符编号范围标识(即,ID 1000-1999 是一种产品,2000-2999 是另一种,3000-3999 是另一种)。
SELECT b.fldMachineName, m2.fldRotaryPressName, mids.fldMachine_ID
FROM dbo.tblCustomerGeneralInfo c
LEFT JOIN dbo.tblMachine_IDs mids ON c.fldCustomer_ID = mids.fldCustomer_ID
LEFT JOIN dbo.tblBobstFlatDieSpecs b ON mids.fldMachine_ID = b.fldMachine_ID
LEFT JOIN dbo.tblDieInfo m1 ON mids.fldMachine_ID = m1.fldMachine_ID
LEFT JOIN dbo.tblRotaryDieSpecs sm ON m1.fldMachine_ID = sm.fldMachine_ID
LEFT JOIN dbo.tblRotaryPresses m2 ON sm.fldRotaryPress_ID = m2.fldRotaryPress_ID
WHERE c.fldCustomer_ID = '20'
ORDER BY fldRotaryPressName
c.fldCustomer_ID 是我唯一需要的用户输入,当我在 SQL Server Management Studio Express 中对数据库运行此查询时,它运行良好。但是,当我将其包装在我用 C# 为 SharePoint 编写的 Web 部件中的 using 语句中时,它不会返回它应该返回的第一行,而是返回一个空值。例如,如果在 SSMS 中我得到三个结果(例如,'1001'、'2008' 和 3045'),那么我的数据读取器将仅返回两个结果,第一个结果为空值(即,'null'、'2008' ,' 和 '3045')。这是我在 C# 中的代码:
con.Open();
using (SqlCommand cmd = new SqlCommand("SELECT b.fldMachineName, m2.fldRotaryPressName, mids.fldMachine_ID " +
"FROM dbo.tblCustomerGeneralInfo c " +
"LEFT JOIN dbo.tblMachine_IDs mids ON c.fldCustomer_ID = mids.fldCustomer_ID " +
"LEFT JOIN dbo.tblBobstFlatDieSpecs b ON mids.fldMachine_ID = b.fldMachine_ID " +
"LEFT JOIN dbo.tblDieInfo m1 ON mids.fldMachine_ID = m1.fldMachine_ID " +
"LEFT JOIN dbo.tblRotaryDieSpecs sm ON m1.fldMachine_ID = sm.fldMachine_ID " +
"LEFT JOIN dbo.tblRotaryPresses m2 ON sm.fldRotaryPress_ID = m2.fldRotaryPress_ID " +
"WHERE c.fldCustomer_ID = @CustomerID " +
"ORDER BY fldRotaryPressName", con))
{
cmd.Parameters.Add("@CustomerID", SqlDbType.VarChar, 4).Value = customers.SelectedValue.ToString();
我们的 SQL 探查器显示正在传递的相同查询,无论它是通过 SSMS 还是从 Web 部件完成的,除了所使用的文字与参数之外。此外,如果我将参数更改为文字,我会得到相同的结果。 C# 处理 SQL 查询的方式与 SSMS 相比是否存在差异,或者我是否以某种方式错误地实现了它?
为了完整起见,下面是将阅读器中的数据拉入下拉列表的代码:
dr.read();
while (dr.Read())
{
try
{
string itemValue = Convert.ToString(dr["fldMachine_ID"]);
string flatName = Convert.ToString(dr["fldMachineName"]);
if (!string.IsNullOrEmpty(flatName))
{
items.Add(flatName, itemValue);
}
string rotaryName = Convert.ToString(dr["fldRotaryPressName"]);
if (!string.IsNullOrEmpty(rotaryName))
{
items.Add(rotaryName, itemValue);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
// Bind list to ddl.
machines.DataSource = items;
machines.DataValueField = "Value";
machines.DataTextField = "Key";
machines.DataBind();
machines.Enabled = true;
}
我完全被难住了,非常感谢能得到的任何帮助。
最佳答案
更新
原来问题出在循环之前额外的 dr.Read() 调用。查看评论。
更新
查看代码,数据绑定(bind)似乎在错误的位置——也许是这样的?此外,我将其更改为显示空项...也许这会暴露逻辑问题。
while (dr.Read())
{
try
{
string itemValue = dr["fldMachine_ID"].ToString();
string flatName = dr["fldMachineName"].ToString();
if (string.IsNullOrEmpty(flatName)) flatName = "!NULL!";
if (string.IsNullOrEmpty(itemValue)) itemValue = "!NULL!";
items.Add(flatName, itemValue);
string rotaryName = dr["fldRotaryPressName"].ToString();
if (string.IsNullOrEmpty(rotaryName)) rotaryName= "!NULL!";
items.Add(rotaryName, itemValue);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
// Bind list to ddl.
machines.DataSource = items;
machines.DataValueField = "Value";
machines.DataTextField = "Key";
machines.DataBind();
machines.Enabled = true;
旧
它会不会像 customers.SelectedValue.ToString().Trim()
这样愚蠢的东西?
您可以运行探查器并准确查看服务器正在执行的 SQL...然后在 SSMS 中运行它以查看您是否仍会得到不同的结果。
关于c# - Datareader 跳过第一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097071/
是 dataReader[i] 逻辑上等价于 dataReader.GetValue(i) 他们是一样的吗?它们不同吗?是否存在一种情况比另一种更合适的情况? 有documented differen
我有一个 DataReader...我将 DataReader 的结果用作另一个 DataReader 的参数,该 DataReader 连接到具有存储过程类型的命令。它现在工作得很快,但我担心我的数
我正在尝试验证我的数据库中经过哈希处理和加盐处理的密码。我在用户表用户名、哈希值和盐中创建了一列。现在我想知道我可以使用数据读取器访问其他列值。 我尝试了这个方法,但出现了一条红线。这也是我失败的尝试
正如您可能已经从标题中猜到的,我正在尝试这样做: #region check new nations private void checknewnations() {
我正在实现 IDataReader,我想知道 Dispose 的实现是否应该调用 Close。 此外,Close 是否应该调用 Dispose? 我的猜测是 Close 不应调用 Dispose 而
类似于this question ,但答案从来没有真正解决我想知道的问题。从 DataReader 获取值是否有任何标准?即,是这个 dataReader.GetString(dataReader.G
Microsoft(和许多开发人员)claim SqlDataReader.GetOrdinal 方法提高了从 DataReader 检索值的性能,而不是使用命名查找,即。读者[“列名”]。问题是什么
我们正在使用 Dapper 来映射我们的 sql 数据,到目前为止它运行良好。我有一个案例,我们正在做类似的事情: someObject = con.Query("GetInfoSproc", p,
let reader = selectCommand.ExecuteReader() let getBytesData (x : IDataReader) = let len = reader
所以我对市场之间的冗余标签名称有点问题。例如在使用以下代码获取数据时: from pandas_datareader import data as pdr from datetime import d
我有一个相当复杂的 SQL 查询,它根据客户 ID 从数据库中提取不同类型的产品。它提取三种不同类型的产品,由其唯一标识符编号范围标识(即,ID 1000-1999 是一种产品,2000-2999 是
我的目标是从数据源检索数据,向其中添加一些元数据并将其插入到另一个目标。 目标的架构比源(计算列)多四列。 我正在使用 SqlBulkCopy,它需要一个具有所有列(包括 4 个计算的列)的读取器。
所以基本上我的应用程序中有两个连接: conn = new MySqlConnection("server=" + ip + ";uid=" + user +";pwd=" + pass + ";da
我使用下面的代码在 C# 中从 mySql 获取数据。当我这样做时,我收到代码下方提到的错误。我发现了一些关于这个主题的问题,但他们使用了 DataReader,而我没有。 MySqlConnecti
我使用 EF+MySql,数据库包含两个 foriegnkey,当我运行我的项目时,它说:已经有一个打开的 DataReader 与此连接关联,必须先关闭,然后我将 MultipleActiveRes
我正在尝试创建一个基于变量的DataReader。我需要根据选择了 TreeView 中的哪个节点来填充一系列 TextBoxes,并且父节点数据与子节点数据不同。所以,我写了这段代码: using
我遇到了一个错误,提示我的数据读取器已经打开。 我的代码是这样的 public static Users GetByID(int ID, SqlConnection connection) {
我想做的与 OP 在此处提出的要求类似: Multiples Table in DataReader 我试图将一个或多个 SQL 查询的结果存储到单独的数据表中。上述问题的方法的问题在于它仅适用于每个
我正在遍历我的数据库以显示球员关联的联赛列表。如果玩家不是任何联盟的成员,则会显示一条消息告诉他们。 这是代码 if (dReader.Read()) { while (dR
我只是使用 pandas datareader 来获取过去两周左右的股票数据,它运行良好。突然间,从昨天开始,所提供的日期就不再有效了。它只是给我过去一年的数据,我无法更改日期。曾经与注释掉的那个一起
我是一名优秀的程序员,十分优秀!