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

我正在尝试在数据库中创建一个新表,该表具有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(); 

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

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

它应该是这样的。 请注意从第二个参数开始指定的值。 您可以使用常量或某个变量代替此处显示的常量。 逗号后面指定的值将替换索引顺序中的占位符。 {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) 

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

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

你在各个地方调用了包含{0} string.Format ,表明你想要替换占位符……但是你没有提供占位符值。

你想要的东西:

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

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

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

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

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

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