索引(从零开始)必须大于或等于零且小于参数列表的大小

时间:2012-04-27 17:59:55

标签: c# database sqlite

我正在尝试在数据库中创建一个新表,该表具有checkout的名称和我在{0}中放入的支票号。但是当我运行程序时,它会出现“Productlist varchar(50)”标题中显示的错误

SQLiteCommand tableCreateCommand = myConnection.CreateCommand();
tableCreateCommand.CommandText = string.Format("create table Checkout{0} (ID int, Productlist varchar{0}, Date varchar {0}, Time varchar (50), Total double)");
tableCreateCommand.ExecuteNonQuery();

4 个答案:

答案 0 :(得分:3)

您在不同地方呼叫string.Format包括{0},表示您希望替换占位符...但您没有提供占位符值。

你想要这样的东西:

tableCreateCommand.CommandText = string.Format("...", checkNumber);

但是,我怀疑你实际想要多个参数({0}{1}{2}等),而不仅仅是一个。您从<{1}}

的结果中期待的SQL是什么?

答案 1 :(得分:3)

您尚未在String.Format中为占位符指定任何值。

string.Format("create table Checkout{0} (ID int, Productlist varchar{0}, 
Date varchar {0}, Time varchar (50), Total double)",  <you need to specify  
the list of values for place holders here...>)

它应该是这样的。请注意从第二个参数开始指定的值。您可以使用常量或某个变量代替此处显示的常量。逗号后面指定的值将替换索引顺序中的占位符。 {0}将使用值 123456 {1}将使用 50 {2}将使用 65 和{ {1}}将使用 75

{3}

如果您需要为checkout指定的varchar使用相同的占位符,它应该是这样的。我不确定这是不是你的意图。此处所有占位符{0}将使用相同的值100。

string.Format("create table Checkout{0} (ID int, Productlist varchar({1}), 
Date varchar({2}), Time varchar ({3}), Total double)", 123456, 50, 65, 75)

答案 2 :(得分:0)

您尚未将字符串传递给string.Format,它需要放入您的{0}占位符。你错过了一个变量吗?

...string.Format("your long format string {0}", someMissingStringVar);

答案 3 :(得分:0)

在此示例中,您使用包含占位符String.Format的字符串调用{0},但未提供任何参数。您需要删除占位符或提供填充{0}位置

的参数

如果您想将{0}字面上放入字符串中,请不要使用String.Format或通过{{0}}正确转义它们。