2012-04-27 126 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}}他們。

相關問題