簡體   English   中英

從綁定到DataGrid的C#中的自定義SQL查詢保存數據

[英]Save data from custom sql query bound to a DataGrid in C#

所以我有這個問題-我想允許我的應用程序的用戶對PostgreSql數據庫運行選擇查詢,我希望這些查詢返回的數據綁定到DataSet > DataGrid 問題是“自定義”部分:)。 當然,當我嘗試使用join子句編輯來自查詢的數據時,麻煩就開始了。 我收到一個錯誤消息,說由於缺少主鍵列而無法自動生成UpdateCommand ,這是可以預期的(嗯,至少我期望如此)...我想出的解決方案是原始的,但對於我-我有一個表名列表,當在自定義查詢中找到這些表名之一時,我想立即生成自己的UpdateCommand 所以:

  1. 我在編寫從查詢中獲取表名的正則表達式時遇到了麻煩,因此,我們將不勝感激:)。 事情很棘手-您必須記住,表名也可以作為列名找到,因此正則表達式應該能夠過濾掉這種情況。
  2. 在我的情況下,這通常是個好主意嗎? 也許對我的問題有一個更簡單和/或更優雅的解決方案?

類似於偽代碼:

string[] names = new string[] { "table1", "table2" };
string customQuery = GetWhateverUserWroteInATextBox();

//what I want to do is to find name coming from names array in the customQuery

我稱其為自定義查詢,因為用戶編寫了查詢,而我無法預測用戶輸入的內容。

第一個問題:

正如您所說的,正則表達式有點棘手...

        string[] tableNames = new string[] { "table1", "table2" };
        List<string> fields = new List<string>();
        Regex rgx = new Regex(@"\w+(?=\s?,?)");
        MatchCollection matches = rgx.Matches(textBox1.Text);
        foreach (Match m in matches)
        {
            if (!tableNames.Contains(m.Value))
            {
                fields.Add(m.Value);
            }
        }

如果U可以說服您的用戶使用來分隔字段,則可以正常使用;)

如果我的模式與您的姓名樣式不匹配,則可以制作自己的模式,這是一些說明:

第二個問題:

  1. 用戶輸入自己的查詢的方式不好,因為:

    • 對於這種查詢,您必須通知用戶表和字段名稱。 這意味着您要放松警惕,接受一些安全風險。

    • 它不是用戶友好的。 用一堆名字和一些硬性規則來填充文本框對於用戶來說並不簡單。 請注意,要成為一名優秀的開發人員,您必須想象所有用戶都是懶惰和白痴。

    • 您不能阻止用戶的訪問。 如果用戶可以進行自己的查詢,那么他們可以簡單地對您的所有記錄和表進行所有查詢。 在這種情況下,某些信息可能必須隱藏起來,您無法保證。

    • 您不能說服用戶在進行新查詢時不遵守規則,否則將對您和用戶造成錯誤。

  2. 您可以簡單地創建自己的界面。

    • 新界面對用戶來說是一種新體驗,因此他們會喜歡的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM