从字符串集合中提取值

时间:2013-12-27 17:52:40

标签: c# asp.net arrays

我有一个像这样的字符串集合

SetDEL_Stores.Add(DealerCode + "," + ItemIdentityCode.Text + "," + decimal.Parse(Qty.Text) + "," + DateTime.ParseExact(ExpireDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture) + "," + BatchNumber.Text);

InsertDEL_Stores(SetDEL_Stores);

将值传递给SetDEL_Stores(我的字符串集合)后,集合是

"S0010M,AZI002M,3,12/26/2013 12:00:00 AM,VDIQ20"

在这种情况下,我使用此集合中的一个值,作为SQL查询的参数

    private void InsertDEL_Stores(StringCollection SC_PurLinr)
    {
        String strConnString = ConfigurationManager.ConnectionStrings["CBConnectionString"].ConnectionString;
        const String strQuery = "SELECT BatchNumber FROM DEL_Stores WHERE BatchNumber = @BatchNumber";
        SqlConnection conPR = new SqlConnection(strConnString);
        SqlCommand cmdPR = new SqlCommand();
        cmdPR.Parameters.AddWithValue("@BatchNumber", SC_PurLinr.IndexOf("4"));
        cmdPR.CommandType = CommandType.Text;
        cmdPR.CommandText = strQuery;
        cmdPR.Connection = conPR;

            conPR.Open();
            SqlDataReader sdr = cmdPR.ExecuteReader();
            while (sdr.Read())
            {
                TextBox1.Text = sdr["BatchNumber"].ToString();
            }

            conPR.Close();
            conPR.Dispose();
     }

执行后我收到错误

  

将nvarchar值'VDIQ20'转换为数据类型int时转换失败。

它指向

while (sdr.Read())

但是,如果我像往常一样设置cmdPR.Parameters.AddWithValue("@BatchNumber", "VDIQ20");这样的参数,我可以将正确的值设置为预期的文本框

我该怎么做才能解决这个问题?请帮帮我..

4 个答案:

答案 0 :(得分:3)

编辑:

我认为你还有一些问题。当您传递单个字符串时,您将整个StringCollection传递给此方法。在这种情况下,我认为你不需要使用StringCollection。

类似的东西:

var singleItem = SC_PurLinr[0]; 
InsertDEL_Stores(singleItem);

将您的方法更改为:

private void InsertDEL_Stores(string singleItem)

....

cmdPR.Parameters.AddWithValue("@BatchNumber", singleItem.Split(',')[4]);

答案 1 :(得分:2)

SC_PurLinr.IndexOf("4")没有回复我的想法。它返回int,而不是string。

如果是您的示例字符串,则找不到“4”并返回-1。

所以你的查询是 "SELECT BatchNumber FROM DEL_Stores WHERE BatchNumber = -1"

为了检查BatchNumber = -1数据库是否将BatchNumber(nvarchar)转换为int但它不能,这就是您收到此错误的原因。

相反,您应该将StringCollection编入索引以获取您不想调用IndexOf方法的元素。

答案 2 :(得分:2)

除了Peri的回答。 (编辑以更正BatchNumber的索引)

如果您尝试访问第4个字符串(StringCollection是零索引集合类型)。你需要做这样的事情。

cmdPR.Parameters.AddWithValue("@BatchNumber", SC_PurLinr[3]);

这将为您提供SC_PurLinr的第4个值,它看起来像是您要查找的批号。

答案 3 :(得分:0)

.IndexOf("4")会返回int,而不是string