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

本文关键字:参数 小于 列表 等于零 从零开始 大于 索引 | 更新日期: 2023-09-27 18:32:33

我正在尝试在数据库中创建一个新表,该表具有结帐名称和我放入{0}的检查号。但是当我运行程序时,它会出现"产品列表 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();

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

您尚未在 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,{3}将使用 75

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

如果您需要对 varchar 使用与结帐相同的占位符,它应该是这样的。我不确定这是否是你的意图。在这里,所有占位符{0}都将使用相同的值 100。

string.Format("create table Checkout{0} (ID int, Productlist varchar({0}), 
Date varchar({0}), Time varchar (50), Total double)", 100)

您正在调用string.Format,包括不同位置的{0},表示您希望替换占位符...但您没有提供占位符值。

你想要这样的东西:

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

但是,我怀疑您实际上想要多个参数({0}{1}{2}等),而不仅仅是一个。您期望string.Format的结果中获得什么 SQL?

您尚未将字符串传递到字符串。它需要放入{0}占位符中的格式。您是否缺少变量?

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

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

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

相关文章: