Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Sql server 2005 将xls记录上载到数据库的有效方法_Sql Server 2005_Vb6_Ado - Fatal编程技术网

Sql server 2005 将xls记录上载到数据库的有效方法

Sql server 2005 将xls记录上载到数据库的有效方法,sql-server-2005,vb6,ado,Sql Server 2005,Vb6,Ado,将记录从excel文件上载到数据库表的最有效方法是什么。我不允许使用DTS/SSI。因此,我想知道是否有比从文件中顺序读取记录并触发命令更好的替代方法 谢谢。我建议您通过ADODB连接使用ODBC/DSN连接到excel文件。 我发现这是相当有效的 首先通过以下操作创建ODBC数据源名称:控制面板>管理工具>数据源(ODBC)。选择“系统”选项卡并单击“添加”。从显示的驱动程序列表中选择“Microsoft Excel驱动程序”。为您的DSN命名,例如“MYDB”,然后导航xlS文件并双击以选择

将记录从excel文件上载到数据库表的最有效方法是什么。我不允许使用DTS/SSI。因此,我想知道是否有比从文件中顺序读取记录并触发命令更好的替代方法


谢谢。

我建议您通过ADODB连接使用ODBC/DSN连接到excel文件。 我发现这是相当有效的

首先通过以下操作创建ODBC数据源名称:控制面板>管理工具>数据源(ODBC)。选择“系统”选项卡并单击“添加”。从显示的驱动程序列表中选择“Microsoft Excel驱动程序”。为您的DSN命名,例如“MYDB”,然后导航xlS文件并双击以选择

这可以通过编程来完成,只是我们创建了一个dll,就像5年前一样,我还在试图找到它的源代码。我会尽快发布它的代码

然后,您可以通过程序按如下方式连接到DSN:

  'declare the connection
   Global MyConn As New ADODB.Connection

  'open the connection
   MyConn.Open "DSN=MYDB;pwd=;"
然后,您可以通过ADODB记录集以正常方式操作连接


我希望这有帮助

您是否有权限?

您可以使用该实用程序。将Excel文件另存为文本,并将其以bcp方式输入。您通常不需要大容量插入权限即可完成此操作。

有相反的代码-从SQL Server提取数据并将其插入Excel。您所需要做的就是交换连接字符串

像这样:

    private System.Data.OleDb.OleDbDataAdapter da ;
    private System.Data.DataSet ds;

    string sqlSelect="SELECT ProductId, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, GETDATE() as TimeExtracted  from Products order by UnitPrice";

    string sqlInsert="INSERT INTO Foo (ProductId, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, TimeExtracted) VALUES (@ProductId, @ProductName, @QuantityPerUnit, @UnitPrice, @UnitsInStock, @TimeExtracted)"; 

    string ExtractedTableName= "ExtractedData";


    private void ReadFromSource()
    {
        System.Console.WriteLine("Reading from Source...");

        string ConnStringSource= 
            "Provider=Microsoft.Jet.OLEDB.4.0;" + 
            "Data Source=" + ExcelFilename + ";" + 
                                             "Extended Properties=\"Excel 8.0;HDR=yes;\"";  // FIRSTROWHASNAMES=1;READONLY=false\"

        using (var conn= new System.Data.OleDb.OleDbConnection(ConnStringSource))
        {
            da= new System.Data.OleDb.OleDbDataAdapter();
            da.SelectCommand=  new System.Data.OleDb.OleDbCommand(sqlSelect);
            da.SelectCommand.Connection= conn;

            // this tells the DA to mark all rows as newly inserted.
            // upon calling da.Update() (later), all those rows will
            // be inserted into the DB.
            da.AcceptChangesDuringFill= false;

            ds= new System.Data.DataSet();
            da.Fill(ds, ExtractedTableName);
        }
    }


    private void InsertIntoDestination()
    {
        System.Console.WriteLine("Inserting data into Destination...");

        string ConnStringDest= "Provider=sqloledb;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI;";

        using (var conn= new System.Data.OleDb.OleDbConnection(ConnStringDest))
        {

            System.Data.OleDb.OleDbCommand cmd= new System.Data.OleDb.OleDbCommand(sqlInsert);

            cmd.Parameters.Add("@ProductId", System.Data.OleDb.OleDbType.Integer, 4, "ProductId");
            cmd.Parameters.Add("@ProductName", System.Data.OleDb.OleDbType.VarWChar, 40, "ProductName");
            cmd.Parameters.Add("@QuantityPerUnit", System.Data.OleDb.OleDbType.VarWChar, 20, "QuantityPerUnit");
            cmd.Parameters.Add("@UnitPrice", System.Data.OleDb.OleDbType.Currency, 8, "UnitPrice");
            cmd.Parameters.Add("@UnitsInStock", System.Data.OleDb.OleDbType.SmallInt, 2, "UnitsInStock");
            cmd.Parameters.Add("@TimeExtracted", System.Data.OleDb.OleDbType.Date, 8, "TimeExtracted");

            da.InsertCommand=  cmd;
            da.InsertCommand.Connection= conn;

            da.Update(ds, ExtractedTableName);

            // in the event you want to update a datasource via a different DataAdapter --
            // for example you want to fill from a System.Data.SqlClient.DataAdapter and
            // then Update via a System.Data.Oledb.OledbDataAdapter -- then you could define
            // two distinct DataAdapters.  Fill the DataSet with the first DA, then Update
            // with the second DA. 
        }
    }

谢谢你能发布一些代码或给我一个参考链接吗?我会非常感激的。