.net 动态创建SQL表(Win Form应用程序中的表设计器)

.net 动态创建SQL表(Win Form应用程序中的表设计器),.net,sql,sql-server,.net,Sql,Sql Server,我正在.NET中创建windows应用程序。它需要为最终用户设计表提供便利 基本上,将有某种形式,在这种形式下,将有网格,就像我们在SQLServerManagementStudio中看到的那样。一列表示数据类型(数字、文本等,而不是Int、Nvarchar) 有人知道怎么做吗?有人知道任何用户控件的开源库可以帮助我吗 编辑: 我还需要提供更改表格的便利。所以很明显,如果不适当的修改会引发异常。应用程序将处理它并向最终用户显示消息。让应用程序使用SQL/DDL命令如何?让应用程序使用SQL/DD

我正在.NET中创建windows应用程序。它需要为最终用户设计表提供便利

基本上,将有某种形式,在这种形式下,将有网格,就像我们在SQLServerManagementStudio中看到的那样。一列表示数据类型(数字、文本等,而不是Int、Nvarchar)

有人知道怎么做吗?有人知道任何用户控件的开源库可以帮助我吗

编辑:


我还需要提供更改表格的便利。所以很明显,如果不适当的修改会引发异常。应用程序将处理它并向最终用户显示消息。

让应用程序使用SQL/DDL命令如何?

让应用程序使用SQL/DDL命令如何?

只需在动态创建的脚本中使用CREATE TABLE即可基于用户的输入

CREATE TABLE [dbo].[NewTable](
    [Id] [int] NOT NULL,
    [LoginId] [varchar](128) NULL,
    [EmailAddress] [nvarchar](256) NULL,
    [LocationName] [char](30) NULL,
    [DateAdded] [datetime]
)

确保连接到数据库的用户具有创建表的适当权限。

只需在脚本中使用创建表,即可根据用户的输入动态创建

CREATE TABLE [dbo].[NewTable](
    [Id] [int] NOT NULL,
    [LoginId] [varchar](128) NULL,
    [EmailAddress] [nvarchar](256) NULL,
    [LocationName] [char](30) NULL,
    [DateAdded] [datetime]
)

确保您连接到数据库的用户具有创建表的适当权限。

基本上,您所要做的就是获取用户输入的数据,并将create TABLE语句作为字符串,传递给SQLCommand,然后调用ExecuteNonQuery()。创建语句本身是非常简单的数据解析;获取GridView中每个单元格的值(如果没有所有必要的信息或没有意义,则引发异常),并将其粘贴到命令中


我建议使用StringBuilder将字符串组合在一起。在构建列列表时,您可能会使用一两个循环遍历gridview的行,在这种情况下,使用“+”运算符进行简单的字符串连接将非常缺乏内存(字符串是不可变的;它们是先创建然后销毁的,从不修改。每次将一个字符串添加到另一个字符串时,都会在内存中创建一个新字符串,而成为新字符串的两个字符串也会在内存中,直到GC线程运行为止,这给了垃圾收集器一个真正的训练).

基本上,您所要做的就是获取用户输入的数据,并将CREATE TABLE语句作为字符串,传递给SQLCommand,然后调用ExecuteNonQuery()。创建语句本身是非常简单的数据解析;获取GridView中每个单元格的值(如果没有所有必要的信息或没有意义,则抛出异常),并将其粘贴到命令中


我建议使用StringBuilder将字符串组合在一起。在构建列列表时,您可能会使用一两个循环遍历gridview的行,在这种情况下,使用“+”运算符进行简单的字符串连接将非常缺乏内存(字符串是不可变的;它们是先创建然后销毁的,从不修改。每次将一个字符串添加到另一个字符串时,都会在内存中创建一个新字符串,而成为新字符串的两个字符串也会在内存中,直到GC线程运行为止,这给了垃圾收集器一个真正的训练)我只需要根据用户输入生成
create table
脚本。只需要支持MS SQL Server。目前不需要任何其他数据库。您可能需要自己编写它-我不确定是否有用于此目的的控件。这似乎不是一项复杂的任务-您只需生成
crea即可te table
基于用户输入的脚本。+1非常好的提及。OP的工作量基本相同,但很好地指出一个替代方案。+1非常好的提及。OP的工作量基本相同,但很好地指出一个替代方案。是的,我们可以使用它。提出问题的原因是我们正在紧张的计划中工作dule,所以,如果我们得到任何库或用户控件,那么我们就不需要给测试和所有其他工作留出时间。否则,我们需要从头开始创建它并使其可重用。您可以使用此解决方案,也可以使用@ConradFrix的解决方案。无论哪种方式,您都必须为此付出努力。是的,我们可以使用它。提出此问题的原因是我们的工作日程很紧,所以如果我们有任何库或用户控件,那么我们就不需要给测试和所有其他工作留出时间。否则我们需要从头开始创建它并使其可重用。您可以使用此解决方案,也可以使用@ConradFrix的解决方案。无论哪种方式,您都必须为此付出汗水。