2012-04-27 266 views
0

我正尝试在数据库中创建一个新表,该数据库具有结帐名称和支票号码{0}。但是,当我运行它,它出现在标题显示“(50)产品列表VARCHAR”你包括在不同的地方{0}调用string.Format错误的索引(从零开始)必须大于或等于零并小于参数列表的大小

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(); 
+0

在运行命令之前是否用其他文本替换了“{0}”?如果是这样,你能告诉我们更换吗?否则,“{0}”的目的是什么? – therealmitchconnors 2012-04-27 18:02:07

回答

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}将使用值,{1}将使用,{2}将使用和{3}将使用。

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

谢谢Siva,现在开始工作:D – TweedyMK 2012-04-27 18:18:59

3

,表明你想有一个占位符被替换...但你没有提供占位符值。

你想要的东西,如:

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

不过,我怀疑你实际上要多个参数({0}{1}{2}等),而不是只有一个。你是什​​么SQL 期望string.Format的结果?

+0

我有Checkout {0}的原因是有多个结帐可以将交易发送到服务器,所以{0}代表结帐编号 – TweedyMK 2012-04-27 18:09:36

+0

@TweedyMK:但您也*使用“{0}”另外两个地方。你期望的价值是什么?你是如何期望'string.Format'获得结账号码的? – 2012-04-27 18:12:53

0

你没有通过一个字符串的String.Format它需要放入您的{0}占位符。你是否缺少一个变量?

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

在这个例子你叫String.Format含占位{0}一个字符串,但没有提供任何参数。你需要要么删除占位或如果你想提供一个参数,填补了{0}插槽

从字面上把{0}到字符串则不要使用String.Format或通过正确逃生{{0}}他们。

相关问题