Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以从c#将数据插入mdb文件中未知列的表中吗?_C#_Ms Access_Datagridview_Windows Applications - Fatal编程技术网

我可以从c#将数据插入mdb文件中未知列的表中吗?

我可以从c#将数据插入mdb文件中未知列的表中吗?,c#,ms-access,datagridview,windows-applications,C#,Ms Access,Datagridview,Windows Applications,我想我有一个奇怪的疑问 我在mdb文件中使用C#[使用非编程工具]创建了一个表,然后我将值插入到该表中,问题是我不知道该表中有多少列可用,但我想插入datagridview中的值 Spire.DataExport.Access.AccessExport AccessExport=新Spire.DataExport.Access.AccessExport() accessExport.DataSource=Spire.DataExport.Common.ExportSource.DataTable

我想我有一个奇怪的疑问

我在mdb文件中使用C#[使用非编程工具]创建了一个表,然后我将值插入到该表中,问题是我不知道该表中有多少列可用,但我想插入datagridview中的值

Spire.DataExport.Access.AccessExport AccessExport=新Spire.DataExport.Access.AccessExport()

accessExport.DataSource=Spire.DataExport.Common.ExportSource.DataTable;
accessExport.DataTable=this.dataGridView2.DataSource as System.Data.DataTable;
accessExport.DatabaseName=saveFileDialog1.FileName;
accessExport.TableName=“ExtractedTable”;
accessExport.SaveToFile();
//OleDbCommand cmdt=新的OleDbCommand(“创建表”+profiletablegrid.”,con);
字符串strDirectory=saveFileDialog1.FileName;
OleDbConnection conn=新的OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+strDirectory”);
conn.Open();
对于(int i=41;i
因为我知道列,所以我插入了4个值,但是如果我不知道有多少列,那么我如何插入值。。。
我可以计算datagridview的总列数,但我如何才能根据这一点进行插入?

而不知道
表的
列名
列数
。根据我的经验,
插入
数据
是不可能的。你如何利用这项工作来获得
列名
特定的
表格
,然后
将数据
插入那些
。 您要做的第一件事是确保没有返回任何数据:

SELECT TOP 0 your_table.* FROM your_table WHERE 1 = 2;
现在假设您知道如何设置
DataReader
,您将执行以下操作:

using(var reader = command.ExecuteReader())
{
    // This will return false - we don't care, we just want to make sure the schema table is there.
    reader.Read();

    var table = reader.GetSchemaTable();
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine(column.ColumnName);
    }
}
现在您有了列名,所以构建
insert语句

<>请考虑你有<代码> N<代码>代码> >代码> >代码>你的<代码>代码<代码>将是这样。

List<string> colArr=new List<string>();
foreach (DataColumn column in table.Columns)
{
    colArr.Add(column.ColumnName);
}
List colArr=new List();
foreach(table.Columns中的DataColumn列)
{
colArr.Add(column.ColumnName);
}
现在以这种方式构建sql

string colNames="";
string val="";
for (int i = 0; i < colArr.Count; i++)
{
   if(i!=colArr.Count-1)
   {
     colNames+=col+",";
     val+="Some Value,";
   }
   else
   {
     colNames+=col;
     val+="Some Value";
   }
}
string sqlQuery="Insert Into your_Table "+colNames+" ("+val+")";
string colNames=”“;
字符串val=”“;
for(int i=0;i
假设您使用的是
OleDbConnection
您可以调用

DataTable schema = connection.GetSchema("Columns");
要获取数据库的模式数据…在该表中,您将在数据库中找到每个表的每一列


使用它在运行时生成SQL语句

这将对一个用户有所帮助…实际上,我正在开发一个产品,很多人都会使用,我不知道每个产品将有多少列..有些可能有5或6列,在开发一个产品后,我们不能去更改代码,因此作为一个内置的,我需要一个查询来读取列数并插入值根据列数,我不想要列名知道列数就足够了将代码插入值移到4列,但是如果它们有5列或6列,我们如何插入…有没有办法将datagridview直接导出到mdb文件?我搜索了许多站点,它们所做的只是导出到excel,然后是im在MDB中,您可以尝试将返回的列名保存在一个数组中。然后循环遍历此数组并动态地建立SQL插入语句。这样,如果不增加列数,就不必担心列数。k考虑我有6列,而数组的排列方式与A[[ 0 ]=“p”,[1 ]=“p1”,[2 ]=“p2”,[3 ] =。p3“,a[4]=“p4”,a[5]=“p5”。。那么如何对此给出insert语句,将值插入表中(“…”);如何将所有值传递到一行??
DataTable schema = connection.GetSchema("Columns");