返回首页

{A}
{S0}简介
本文使用OleDbDataAdapter的一个MS Access数据库中插入多个新记录(行)的方法。背景
代码项目很多时候,在这里,我看到后一个"大规模更新"的新记录到数据库寻求帮助。我也看到了这个问题以及其他网站上。记住,当我第一次开始学习完整的数据库,这是给我一个很大的问题。有时你可以找到真正的好信息在网络上或在就如何解决问题的书,但有时你不能。所以,我决定写这篇文章。使用代码
此应用程序的行为,如果是采取一些文件,并加载到一个Access数据库的电表读数。阅读是采取每15分钟。被读在同一时间有四米。这些数据被写入到256位,在一个文件中的行(或8套不同的读数)的文件。每个抄表是8位,共有32位每个读数。
这样的问题:在他们分成组读数行,并把数据表的时间阅读文件的一行。后该文件是只读和数据表是数据库中插入新的记录。数据样本

0006100000000000000250000074800000062000000000000002400000752000

这里的方法,该方法行已经流读取器读取并分割它成读数,并创建一个新行(记录,DR)。然后将数据表(DT)的设置。{C}
让我退后一步,告诉你我是如何得到的数据表。在这里,我有一个在我的数据库类的静态方法,返回一个DataTable。我用一个"选择"SQL语句检索表,将收到的仪表读数。如果你看看在"WHERE"子句,你会看到,我试图以检索0 ReadingID创纪录的。重要的是知道ReadingID是一个自动编号/表PK。它会不会有ReadingID = 0的记录。这仅仅是一个快速的方法来得到表的布局。

        public static DataTable LoadDT(string DB)

        {

            CheckTables(DB);

            DataTable DT = new DataTable();

            string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB +

                                ";User Id=admin;Password=;";

            string SQL = "SELECT * FROM MeterReadings WHERE ReadingID=0";



            OleDbConnection OleConn = new OleDbConnection(ConnString);

            OleDbDataAdapter OleAdp = new OleDbDataAdapter(SQL, OleConn);

            OleConn.Open();

            OleAdp.Fill(DT);

            OleConn.Close();

            return DT;

        }


后,我们已处理了我们的文件,并准备好我们的数据库中插入新的记录。我们需要一个快速简便的方法,这样做的。因此,在寻找下一个代码块,你会看到我相同的SQL创建数据适配器选择为我创造了我的数据表时。这只是有助于确保一切是相同的,到数据库,因为它是未来。我指定一个SQL INSERT添加我的参数,然后执行数据适配器的Update方法。

        public static void UpDataDB(string DB, DataTable DT)

        {

            string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB +

                                ";User Id=admin;Password=;";

            string SQL = "SELECT * FROM MeterReadings WHERE ReadingID=0";

            string INSERT = "INSERT INTO MeterReadings(Meter1, Meter2, Meter3, Meter4) " +

                            "VALUES (@Meter1, @Meter2, @Meter3, @Meter4)";



            OleDbConnection OleConn = new OleDbConnection(ConnString);

            OleDbDataAdapter OleAdp = new OleDbDataAdapter(SQL, OleConn);

            OleAdp.InsertCommand = new OleDbCommand(INSERT);

            OleAdp.InsertCommand.Parameters.Add("@Meter1", OleDbType.Integer, 8, "Meter1");

            OleAdp.InsertCommand.Parameters.Add("@Meter2", OleDbType.Integer, 8, "Meter2");

            OleAdp.InsertCommand.Parameters.Add("@Meter3", OleDbType.Integer, 8, "Meter3");

            OleAdp.InsertCommand.Parameters.Add("@Meter4", OleDbType.Integer, 8, "Meter4");

            OleAdp.InsertCommand.Connection = OleConn;

            OleAdp.InsertCommand.Connection.Open();

            OleAdp.Update(DT);

            OleAdp.InsertCommand.Connection.Close();

        }

兴趣点
虽然我希望这会帮助别人。如果一个人可以达到那么好,我猜巴掌"或者说您好或东西..看着我!!|失去了在过渡

回答

评论会员:其他DB散装 时间:2011/12/07
mrtwentysix
评论会员:游客 时间:2011/12/07
却使你需要的数据集"AcceptChangesduringFill"属性设置为false。那么这将很好地工作。希望这会有所帮助。,mr26
会员3975353
评论会员:游客 时间:2011/12/07
!这不是在所有大宗
埃里克丹尼尔大卫
评论会员:游客 时间:2011/12/07
它不是一个批量插入...其简单的插入
。sonalisharma
评论会员:游客 时间:2011/12/07
嗨,我有以下的代码。你能帮助我当场表的问题,不更新。感谢 readdbsettings()OleDbConnection的msaConn=新的OleDbConnection(msaconstr);DataTable的DT=新的DataTable();SQL字符串="";字符串mSQL的="";字符串minsert="";//MSSQL(DBTYPE=="SQL") { conSQL1=新的SqlConnection(sqlconStr);conSQL1.Open()SQL="选择"产品"作为release_type,sage_code,描述的产品,作为category_aabc_category," """作为category_bscheme.stockm"; SqlDataAdapter的SQLDA=新SqlDataAdapter的(SQL,conSQL1);sqlda.Fill(DT);conSQL1.Close()} //Informix的 (DBTYPE=="INF") { }//写入规则表mSQL的="SELECT*FROMrelease_rules其中0=1";minsert="INSERTINTOrelease_rules(release_type,sage_code,描述,category_a,category_b) "VALUES(@prelease_type,psage_code,@pdescription,@pcategory_a,@pcategory_b)";////"@sage_code" //"(选择release_rulessage_code=@sage_codesage_code);";OleDbDataAdapter的OleAdp=新OleDbDataAdapter的(mSQL的,msaConn);OleAdp.InsertCommand=新的OleDbCommand(minsert)OleAdp.InsertCommand.Parameters.Add("@prelease_type",OleDbType.VarChar,255,"release_type"); OleAdp.InsertCommand.Parameters.Add("@psage_code",OleDbType.VarChar,255,"sage_code"); OleAdp.InsertCommand.Parameters.Add("@pdescription",OleDbType.VarChar,255,"说明");OleAdp.InsertCommand.Parameters.Add("@pcategory_a",OleDbType.VarChar,255,"category_a");OleAdp.InsertCommand.Parameters.Add("@pcategory_b",OleDbType.VarChar,255,"category_b"); OleAdp.InsertCommand.Connection=msaConn OleAdp.InsertCommand.Connection.Open()OleAdp.Update(DT); OleAdp.InsertCommand.Connection.Close()
purepremiumpulp
评论会员:游客 时间:2011/12/07
喜再次最后,我发现这个问题。Access表有一个主键为圣人代码。现在我只是要搞清楚如何摆脱重复imgsrc=http://www.orcode.com/upimg/2011_12_07_08_24_27_1.gif感谢
purepremiumpulp
评论会员:游客 时间:2011/12/07
主席先生,我做了简单的程序来插入表中的数据,它显示的问题,操作必须更新query.it工程本地计算机上,但我在互联网上的网站负载,它显示错误,它必须是可更新的查询。请帮助me.i会很感谢你我的代码如下:OleDbConnection的CONN;OleDbDataAdapter的DataAdapter的;DataSet的DS;字符串CS;CONN=新的OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;数据源="Server.MapPath("db1.mdb的"));{BR}conn.Open();CS="INSERTINTO交易商(名称)值(名字)";OleDbCommand的DC=新的OleDbCommand(CS,CONN);OleDbParameterfparam=新OleDbParameter("@名字",OleDbType.VarChar,10);fparam.Value=TextBox1.Text;dc.Parameters.Add(fparam);dc.ExecuteNonQuery()conn.Close();
rajinder S
评论会员:游客 时间:2011/12/07
我在想,如果有任何方式,让Update方法将出现一次以上?我编写的应用程序,并已非常有益的,到目前为止,但我已不止一次呼吁UpDataDB看来,它不会再次工作无论我怎么安排的DataTable和访问表。任何帮助,请伟大的工作imgsrc=http://www.orcode.com/upimg/2011_12_07_08_24_27_1.gif,感谢
jason_lakewhitney
评论会员:游客 时间:2011/12/07
没关系,我意识到,这是只更新更改的行。
kholiwe
评论会员:游客 时间:2011/12/07
IM使用如下因素的代码,但它不是插入到数据库。选择一个CSV文件,然后与选定的数据填充DataSet对象。其选择的数据从CSV文件,但没有插入到Access数据库......任何建议PLZ字符串ConnString="连接字符串"字符串的SQL="SELECT*FROMallSheetsDataWHEREID=0";字符串的INSERT="插入"到allSheetsData"(符号,系列,BhavDate,打开,关闭,低,高,tottrdqty)""VALUES(@sSymbol,@sSeries,sTimeStamp,sOpen@,sClose@,@缓慢,sHigh@,@sTottrdQty)";OleDbConnection的OleConn=新的OleDbConnection(ConnString);OleDbDataAdapter的OleAdp=新OleDbDataAdapter的(SQL,OleConn);OleAdp.InsertCommand=新的OleDbCommand(插入);OleAdp.InsertCommand.Parameters.Add("@sSymbol",OleDbType.VarChar,255,"符号")OleAdp.InsertCommand.Parameters.Add("@sSeries",OleDbType.VarChar,255,"系列");OleAdp.InsertCommand.Parameters.Add("@sTimeStamp",OleDbType.VarChar,255,"时间戳")OleAdp.InsertCommand.Parameters.Add("@sOpen",OleDbType.VarChar,255,"打开");OleAdp.InsertCommand.Parameters.Add("@sClose",OleDbType.VarChar,255,"关闭")OleAdp.InsertCommand.Parameters.Add("慢",OleDbType.VarChar,255,"低");OleAdp.InsertCommand.Parameters.Add("@sHigh",OleDbType.VarChar,255,"高");OleAdp.InsertCommand.Parameters.Add("@sTottrdQty",OleDbType.VarChar,255,"TOTTRDQTY"){B​​R}//=============================={BR}OleAdp.InsertCommand.Connection=OleConnOleAdp.InsertCommand.Connection.Open()OleAdp.Update(DT);OleAdp.InsertCommand.Connection.Close()
jason_lakewhitney
评论会员:游客 时间:2011/12/07
它看起来是设置正确的我会改变"插入"全部大写"插入到"。rajinder小号中写道:"(符号,系列,BhavDate,打开,关闭,低,高,tottrdqty)"如果他们是小写^^^^^^^确保你把他们在低于vvvvv较低的情况下。rajinder小号写道:OleAdp.InsertCommand.Parameters.Add("@sSymbol",OleDbType.VarChar,255,"符号");OleAdp.InsertCommand.Parameters.Add("@sSeries",OleDbType.VarChar,255,"系列");OleAdp.InsertCommand.Parameters.Add("@sTimeStamp",OleDbType.VarChar,255,"时间戳")OleAdp.InsertCommand.Parameters.Add("@sOpen",OleDbType.VarChar,255,"打开");OleAdp.InsertCommand.Parameters.Add("@sClose",OleDbType.VarChar,255,"关闭")OleAdp.InsertCommand.Parameters.Add("慢",OleDbType.VarChar,255,"低");OleAdp.InsertCommand.Parameters.Add("@sHigh",OleDbType.VarChar,255,"高");OleAdp.InsertCommand.Parameters.Add("@sTottrdQty",OleDbType.VarChar,255,"TOTTRDQTY"){B​​R}给一个尝试。上帝保佑,贾森编程:一个生物机器设计转换成代码咖啡因。开发商:一个人谁开发工作,编写和使用软件的系统[imgsrc=http://www.orcode.com/upimg/2011_12_07_08_24_27_2.gif
JohnAGonzalez
评论会员:游客 时间:2011/12/07
我试图连接到Access数据库,我创建ASP.NET登录页面,使用C#2003代码落后,我不断收到此错误,当试图连接到我的数据库:["/BookFlight"应用程序中的服务器错误。--------------------------------------------------------------------------------{BR}没有错误信息:DB_SEC_E_AUTH_FAILED(0x80040E4D)。说明:执行当前Web请求期间,出现未处理的异常。有关该错误以及代码中获取更多信息,请检查堆栈跟踪。异常详细信息:System.Data.OleDb.OleDbException:没有错误信息:DB_SEC_E_AUTH_FAILED(0x80040E4D)源错误:行116:第117行:如果(oleDbConnection1.State==ConnectionState.Closed)行118:oleDbConnection1.Open()行119:行120://而(dataReader.Read())源文件:c:\inetpub\wwwroot的\bookflight\login.aspx.cs线:118堆栈跟踪:[OleDbException(0x80040e4d):没有错误信息:DB_SEC_E_AUTH_FAILED(0x80040E4D)]System.Data.OleDb.OleDbConnection.ProcessResults(INT32小时)System.Data.OleDb.OleDbConnection.InitializeProvider()System.Data.OleDb.OleDbConnection.Open()BookFlight.WebForm1.CustomValidator1_ServerValidate(对象的源,ServerValidateEventArgsARGS)在C:的\inetpub\wwwroot的\bookflight\login.aspx.cs:118System.Web.UI.WebControls.CustomValidator.OnServerValidate(字符串值)System.Web.UI.WebControls.CustomValidator.EvaluateIsValid()System.Web.UI.WebControls.BaseValidator.Validate()System.Web.UI.Page.Validate() System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(弦乐eventArgument)System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandlersourceControl的StringeventArgument)System.Web.UI.Page.RaisePostBackEvent(NameValueCollection中postData)System.Web.UI.Page.ProcessRequestMain()--------------------------------------------------------------------------------{BR}版本信息:微软NETFramework版本:1.1.4322.2032;ASP.NET版本:1.1.4322.2032]线oleDbConnection1.Open();以红色突出显示,有一些问题与我连接?请帮助。Kholiweimgsrc=http://www.orcode.com/upimg/2011_12_07_08_24_27_3.gif