Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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# 为什么SQLite会告诉我;没有当前行“;?_C#_Sqlite - Fatal编程技术网

C# 为什么SQLite会告诉我;没有当前行“;?

C# 为什么SQLite会告诉我;没有当前行“;?,c#,sqlite,C#,Sqlite,正在发送的查询是良好的;运行它: SELECT line_id, description, department, upc_pack_size, pack_size, unit_cost, unit_list FROM Inventory WHERE siteNum = "03" AND upc_code = "76145513" …在LINQPad中,返回具有以下值的记录: line_id = 0 description = [empty string] department = 2.99

正在发送的查询是良好的;运行它:

SELECT line_id, description, department, upc_pack_size, pack_size, unit_cost, unit_list FROM Inventory WHERE siteNum = "03" AND upc_code = "76145513"
…在LINQPad中,返回具有以下值的记录:

line_id = 0
description = [empty string]
department = 2.99
upc_pack_size = 333
pack_size = 333
unit_cost = 50.01
unit_list = 50.99
但守则:

public List<String> GetDynamicINVValsForUPCCode(String qry, String siteNum, String upcCode)
{
    ExceptionLoggingService.Instance.WriteLog(String.Format("Reached TestHHSDBUtils.GetDynamicINVValsForUPCCode(); siteNum is {0}; upcCode is {1}; qry is {2}", siteNum, upcCode, qry));
    List<String> dsdValsForUPCCode = new List<string>(); 
    try
    {
        using (SQLiteConnection conn = new SQLiteConnection(HHSUtils.GetDBConnection()))
        {
            conn.Open();
            using (SQLiteCommand cmd = new SQLiteCommand(qry, conn))
            {
                cmd.Parameters.Add(new SQLiteParameter("upcCode", upcCode));
                cmd.Parameters.Add(new SQLiteParameter("SiteNum", siteNum));
                using (SQLiteDataReader rdr = cmd.ExecuteReader())
                {
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Line_id"]));       // Line_id, int32
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Description"]));   // Description
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Department"]));    // Department
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Upc_pack_size"])); // Upc_pack_size (int32)
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Pack_size"]));     // Pack_size (int32)
                    dsdValsForUPCCode.Add(Convert.ToString(rdr["Unit_qty"]));      // Unit_qty (single)
                }
            }
            return dsdValsForUPCCode;
        }
    }
    catch (Exception ex)
    {
        String msgInnerExAndStackTrace = String.Format("{0}; Inner Ex: {1}; Stack Trace: {2}", ex.Message, ex.InnerException, ex.StackTrace);
        ExceptionLoggingService.Instance.WriteLog(String.Format("From TestHHSDBUtils.GetDynamicINVValsForUPCCode: {0}", msgInnerExAndStackTrace));
        return null;
    }
}

当有一个参数时,为什么会说“没有当前行”?

我相信SQLite要求参数的前缀名称为“@”、“:”或“$”

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

SELECT line_id, description, department, upc_pack_size, pack_size, unit_cost, unit_list FROM Inventory WHERE siteNum = @siteNum AND upc_code = @upcCode
你的准情人是这样的:

cmd.Parameters.Add(new SQLiteParameter("@siteNum", siteNum));
cmd.Parameters.Add(new SQLiteParameter("@upcCode", upcCode));

虽然我并不十分熟悉SqlLiteReader,但其他读者要求您阅读第一行。我使用的是一个
if
语句,但是如果您希望有很多行,那么您将使用
while
。Read()返回一个布尔值,指示记录是否已被读取。


设置参数时,参数名称需要使用
@
前缀。因此,您的代码应该改为:

cmd.Parameters.Add(new SQLiteParameter("@upcCode", upcCode));
cmd.Parameters.Add(new SQLiteParameter("@SiteNum", siteNum));
此外(如其他答案中所指出的),您还需要首先对读卡器执行
Read()

rdr.Read();

qry
的值是什么?它在文章的开头就给出了。如果你要将它传递到函数中,那么设置参数的意义是什么?抱歉-qry是:从库存中选择行id、描述、部门、upc\u包装大小、包装大小、单位成本、单位列表,其中siteNum=[at sign]siteNum和upc\u code=[at sign]upccodes代码不应该在参数名称中使用
@
符号吗?例如,
new-SQLiteParameter(“@upcCode”,upcCode)
我使用的是“@”s,上面没有看到它们;我显示的查询就是它的解析结果。我正在精确显示我给LINQPad的内容(这会让@s皱眉).qry是:从库存中选择行id、描述、部门、upc\U包装尺寸、包装尺寸、单位成本、单位列表,其中siteNum=[at sign]siteNum和upc\u code=[at sign]upccoDestinll,据我所知,SQLiteParameter需要“@”此外,@THBBFT的答案也是我认为你应该研究的。真的吗?我在这个项目的所有参数中都没有这个答案,而且所有的东西(除了这个方法)都很好。我认为这个答案会的,因为我已经添加了“rdr.Read()”
cmd.Parameters.Add(new SQLiteParameter("@upcCode", upcCode));
cmd.Parameters.Add(new SQLiteParameter("@SiteNum", siteNum));
rdr.Read();