[英]Can't Add Parameter To Query String
我需要第二張MS Access表的副本,該副本將保存在網絡驅動器中。 而且由於拆分不是一種選擇,因為它會極大地降低應用程序的速度,因此我決定在執行某些用戶操作(例如單擊退出按鈕)后手動“合並”數據。
我有這個查詢字符串
public const string MERGETOMAIN = @"INSERT INTO tbl_name (UserID, ...)" +
" IN 'C:\Users\nathan\Desktop\copy.accdb' SELECT TOP 1 UserId, ... " +
" FROM tbl_name WHERE UserID = @currentUser ORDER BY ROWID DESC";
...並且當我這樣做時它起作用:
using (OleDbCommand cmd = new OleDbCommand(Helpers.Queries.MERGETOMAIN, mergeConn))
{
cmd.Parameters.AddWithValue("@currentUser", currentUserID);
cmd.ExecuteNonQuery();
}
但是,您注意到,副本的路徑是硬編碼的。 我希望它是動態的,因此我像往常一樣嘗試使用參數,因此我將其替換為問號:
public const string MERGETOMAIN = @"INSERT INTO tbl_name (UserID, ...)" +
" IN ? SELECT TOP 1 UserId, ... " +
" FROM tbl_name WHERE UserID = @currentUser ORDER BY ROWID DESC";
但這導致以下錯誤:
您的網絡訪問已中斷。 要繼續關閉數據庫,然后再次打開它。
因此,我使用了@parameterName而不是問號。 但是,當我這樣做時,出現以下錯誤:
找不到文件“ foo \\ foo \\ @parameterName”。
奇怪的是,另一個參數@currentUser運行正常。
我不太確定這里發生了什么,但是目前唯一有效的方法是對路徑進行硬編碼。 我試圖通過類似的問題,但沒有骰子。
任何想法將不勝感激。
謝謝。
您可以編寫一個為您創建字符串的方法。
public string getMergeToMain(string path)
{
string strRet;
if (path != null)
{
strRet = @"INSERT INTO FSO_LogSheet (UserID, ...)" +
" IN '" + path + "' SELECT TOP 1 UserId, ... " +
" FROM FSO_LogSheet WHERE UserID = @currentUser ORDER BY ROWID DESC";
return strRet;
}
else
{ //Error, not agood habit to return null...
return null;
}
}
使用方法參數“ path”,可以動態設置路徑。
您可以通過以下方式調用它
OleDbCommand cmd = new OleDbCommand(fooClass.getMergeToMain(@"C:\users\bar.accdb"), mergeConn)
我假設您知道公共方法,私有方法和靜態方法之間的區別,所以請不要忘記根據自己的需要進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.