繁体   English   中英

从字符串集合中提取值

[英]Extract value from string collection

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

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"); 像往常一样,我可以将正确的值带到预期的文本框中

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

编辑:

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

就像是:

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

将您的方法更改为:

private void InsertDEL_Stores(string singleItem)

....

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

SC_PurLinr.IndexOf("4")不会返回我认为您的想法。 它返回int,而不是字符串。

在示例字符串的情况下,找不到“ 4”,并且返回-1。

因此,您的查询是"SELECT BatchNumber FROM DEL_Stores WHERE BatchNumber = -1"

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

相反,您应该对StringCollection进行索引以获得不需要调用IndexOf方法的元素。

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

如果您尝试访问第四个字符串( StringCollection是零索引集合类型)。 您将需要执行以下操作。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM