SQL数据库转access数据库步骤:
1. 建立access数据库:在access中建立access数据库和表,access字段类型与sql中字段类型的对应关系。
2. 在Access中建表是应注意它的保留关键字:比如Password 如果表中的某个字段使用了关键字,那么会导致一系列的语句错误。比如update T_Users setUsername=@Username,Password=@Password where UserId=@UserId"此时就会提示"System.Data.OleDb.OleDbException: UPDATE 语句的语法错误".更多保留关键字可以参照互联网。
3. 从sql导入数据到access数据库。
注意:sql2008只能导出到access2007一下的版本的数据库。
Asp.net应做的修改
1. 修改连接字符串:
将<add name="DBStr"connectionString="data source=.;Database=shelian;integratedsecurity=true"/>改为
<addname ="DBStr"connectionString ="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|shelian.mdb"providerName ="System.Data.OleDb"/>
提示:其中"Jet.OLEDB.4.0"对应的是access2003版本,"|DataDirectory|"表示数据库在App_Date目录下。
2. 导入 using System.Data.OleDb;命名空间。
将以Sql开头的SqlConnection , SqlCommand , SqlParameter, SqlDataAdapter, SqlParameter, SqlDataReader,SqlType等改成OleDbConnection ,OleDbCommand , OleDbParameter,OleDbDataAdapter, OleDbParameter, OleDbDataReader, OleDbType.
3. 修改。net文件中要操作的表中字段类型的
new SqlParameter("@CategoryName",SqlDbType.NVarChar,100),
newSqlParameter("@ParentId",SqlDbType.NVarChar,50),
newSqlParameter("@Path",SqlDbType.NVarChar,200),
newSqlParameter("@Depth",SqlDbType.Int,4),
newSqlParameter("@ChildIds",SqlDbType.NVarChar,50),
newSqlParameter("@IsActive",SqlDbType.Bit,1),
newSqlParameter("@ArticleNum",SqlDbType.Int,4),
newSqlParameter("@Readme",SqlDbType.NVarChar,200),
newSqlParameter("@CategoryId",SqlDbType.Int,4)};
改成:
new OleDbParameter("@CategoryName", OleDbType.LongVarWChar,100),
new OleDbParameter("@ParentId", OleDbType.LongVarWChar,50),
new OleDbParameter("@Path", OleDbType.LongVarWChar,200),
new OleDbParameter("@Depth", OleDbType.Integer,4),
newOleDbParameter("@ChildIds",OleDbType.LongVarWChar,50),
new OleDbParameter("@IsActive", OleDbType.Boolean,1),
new OleDbParameter("@ArticleNum", OleDbType.Integer,4),
new OleDbParameter("@Readme", OleDbType.LongVarWChar,200),
new OleDbParameter("@CategoryId", OleDbType.Integer,4)};
4. 修改查询字语句式:
4.1 将去掉true或false的单引号,如HomeShowImg='true '改成HomeShowImg=true
4.2 !=0改成<>0 ,如 IsPicNews !=0 -> IsPicNews <>0
4.3 =''改成is null.与LogImagePath !=' -> LogImagePath is not nul
4.4 NewsId ='" + newsiid + "'";改成NewsId =" + newsiid + "";
5. 当update语句没错但内容无法更新而且VS又没提示出错的时候,可以考虑是不是OleDbParameter中参数的对应顺序的问题,OleDbParameter参数的顺序迎合update语句中出现的顺序保持一致。
比如: string cmdText = "updateT_FriendlyLink set IsShown=@IsShown,LinkUrl=@txtUrl,LinkText=@txtTitle whereId=@Id";
OleDbParameter[]ps ={
newOleDbParameter ("@Id",Id),
newOleDbParameter ("@IsShown",IsShown),
newOleDbParameter ("@txtUrl",txtUrl),
newOleDbParameter ("@txtTitle",txtTitle),
};
这样在SQLServer中可以运行,但在Access中必须改成
OleDbParameter[]ps ={
newOleDbParameter ("@IsShown",IsShown),
newOleDbParameter ("@txtUrl",txtUrl),
newOleDbParameter ("@txtTitle",txtTitle),
new OleDbParameter ("@Id",Id),
};
6.Access不支持:select @@IDENTITY
7.Access不支持OW_NUMBER() OVER聚合函数。当分页时可使用"select a.* from (select top{0} * from t_news {2} {3}) a leftjoin (select top {1} * from t_news {2}{3}) b on a.NewsId=b.NewsId where iif(b.NewsId,'0','1')='1'", endIndex, startIndex-1, swhere, sorder));替代。
8. 在Access 不能出现top 0或top一个负数。 如select top 0 * fromt_news where isshown=true则会报错:"SELECT子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。"
Access数据库字段类型说明以及与SQL之间的对照关系
文本 nvarchar(n)
备注 ntext
数字(长整型) int
数字(整型) smallint
数字(单精度) real
数字(双精度) float
数字(字节) tinyint
货币 money
日期 smalldatetime
布尔 bit
附:转换成SQL的脚本。
ALTER TABLE tbALTER COLUMN aa Byte 数字[字节]
ALTER TABLE tb ALTER COLUMN aa Long 数字[长整型]
ALTER TABLE tb ALTER COLUMN aa Short 数字[整型]
ALTER TABLE tb ALTER COLUMN aa Single 数字[单精度
ALTER TABLE tb ALTER COLUMN aa Double 数字[双精度]
ALTER TABLE tb ALTER COLUMN aa Currency 货币
ALTER TABLE tb ALTER COLUMN aa Char 文本
ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小
ALTER TABLE tb ALTER COLUMN aa Binary 二进制
ALTER TABLE tb ALTER COLUMN aa Counter 自动编号
ALTER TABLE tb ALTER COLUMN aa Memo 备注
ALTER TABLE tb ALTER COLUMN aa Time 日期/时间
在表的设计视图中,每一个字段都有设计类型,Access允许九种数据类型:文本、备注、数值、日期/时间、货
币、自动编号、是/否、OLE对象、超级链接、查询向导。
文本:这种类型允许最大255个字符或数字,Access默认的大小是50个字符,而且系统只保存输入到字段中的
字符,而不保存文本字段中未用位置上的空字符。可以设置"字段大小"属性控制可输入的最大字符长度。
备注:这种类型用来保存长度较长的文本及数字,它允许字段能够存储长达64000个字符的内容。但Access不
能对备注字段进行排序或索引,却可以对文本字段进行排序和索引。