将语句插入到数据表中

本文关键字:数据表 插入 语句 | 更新日期: 2023-09-27 18:36:57

我正在尝试将插入语句运行到DataTable中(我这样做是为了执行语句中的所有函数,以便我可以获取预期的值)

    private void insertintoDT(DataTable destination, string InsertStatement)
    {
        SqlCommand comm = new SqlCommand(InsertStatement);
        SqlDataReader reader = new SqlDataReader();
        destination.Load(reader);
    }
}

然后,此数据表将被加载到数据网格中,以便我可以看到将要插入的值。我尝试像这样分解插入语句:

    private void breakupInsert(String insert)
    {
        DataTable dt = new DataTable();
        dgvInsert.Rows.Clear();
        string stemp = insert;
        int len = stemp.Length;
        int itemp = 0;
        stemp = stemp.Remove(0, 12);
        itemp = stemp.IndexOf("VALUES") - 1;
        gvtable = stemp.Substring(0, itemp);
        stemp = stemp.Remove(0, itemp + 9);
        int itemcount = stemp.Count(x => x == ',') + 1;
        string[] values = new string[itemcount - 1];
        //populate values
        int h = 0;//Used as a start index
        int itemc = 0; //item index
                for (int k = 0; k < stemp.Length; k++)
                {
                    if (k == stemp.Length - 2)
                    {
                        values[itemc] = ExecuteSQL(stemp.Substring(h, (k + 1) - h));
                        break;
                    }
                    else
                    if (stemp.Substring(k, 2) == (", "))
                    {
                        itemp = stemp.IndexOf(", ");
                        values[itemc] = ExecuteSQL(stemp.Substring(h, k - h));
                        h = k + 2;
                        itemc = itemc + 1;
                        k = k + 1;
                    }
                    else if (stemp.Substring(k, 2) == ("),"))
                    {
                        itemp = stemp.IndexOf("),");
                        values[itemc] = ExecuteSQL(stemp.Substring(h, k - h));
                        h = k + 2;
                        itemc = itemc + 1;
                        k = k + 1;
                    }
                    else if (stemp.Substring(k, 2) == ("',"))
                    {
                        itemp = stemp.IndexOf("',");
                        values[itemc] = ExecuteSQL(stemp.Substring(h, (k - h) + 1));
                        h = k + 2;
                        itemc = itemc + 1;
                        k = k + 1;
                    }
        }
        for (int j = 0; j < values.Length; j++)
        {
            this.dgvInsert.Rows.Insert(j, j + 1, values[j], values[j].Length);
        }
    }

但是,当函数位于插入语句中时,这会中断(例如强制转换)

有没有办法做到这一点,或者这是一个失败的原因?

澄清一下:我本质上是尝试为用户提供一个文本框,他们可以将 SQL 语句粘贴到其中,然后该语句将反映在数据网格中。因此,如果放入插入语句,数据表将反映正在插入的值。但从未将它们插入数据库。

将语句插入到数据表中

查询是特定于数据库的,因此分析查询由特定于数据库的组件完成,可能在数据库服务器上,否则在该数据库的 ADO.NET 驱动程序上。

您可以使用 SQLite 创建内存中数据库,这样您的最终用户就不必设置单独的数据库(它确实需要应用程序附带的 SQLite dll),但是使用这种方法会强制您使用 SQLite 方言,如果您尝试在其他数据库上使用某些查询,则某些查询可能不起作用。不过,这听起来确实是最简单的出路。

这个答案建议使用实体框架来解析查询,但我不知道它是否可以帮助您更新数据表。我自己还没有尝试过,但可能值得研究。