读书人

请教下将MS SQL转换为ACCESS时候数据库

发布时间: 2012-03-07 09:13:51 作者: rapoo

请问下将MS SQL转换为ACCESS时候数据库操作语句要注意什么问题呢?答全就给分,急!
本人做了一个程序,由于需要,要把他转化为ACCESS版的,发现在数据库操作上好多问题,之前在SQL中运行正常的在ACCESS中都不行了。。。

比如,之前 我的MS SQL 数据库的字段num是 int 型,我照样可以这么用。
string num= "1 ";

select * from table where num= 'num '

但是到了ACCESS中就通不过了。。。

我想问的是
1.在ACCESS中 数据库操作中 字段是整数的话,参数又什么要注意的。。
2. 我用OleDbParameter par_tag = new OleDbParameter( "@Tag ", str_tag);
这种方法在ACCESS中可行么? 我在MS SQL中可以用。在ACCESS中老出现
“参数 @IsPic 没有默认值”。“标准表达式中数据类型不匹配”等问题。。

下面是我的代码,帮看下

字段FirstColumnNum,SecondColumnNum,Times 是长整型
字段FirstColumnName,Title,Tag,PicAdress是字符型
字段MS 是备注型
字段 IssueDate,UpdateDate是日期型

string str_title = TextBox_Title.Text;
str_title = str_title.Trim();
string str_content = FCKeditor1.Value;
str_content=str_content.Trim();
int str_count=int.Parse(TextBox_Count.Text);
string str_tag = TextBox_KeyWord.Text;
str_tag = str_tag.Replace( ", ", ", ");
str_tag=str_tag.Trim();
string str_picaddress = image_url;
DateTime date_senddate = System.DateTime.Now;
DateTime date_update = System.DateTime.Now;

string cmd_txt = "insert into Article (FirstColumnNum,FirstColumnName,SecondColumnNum,Title,IsPic,Tag,MS,PicAdress,Times,IssueDate,UpdateDate) ";
cmd_txt += " Values (@FirstColumnNum,@FirstColumnName,@SecondColumnNum,@Title,@IsPic,@Tag,@MS,@PicAdress,@Times,@IssueDate,@UpdateDate) ";
OleDbCommand cmd = conn.runcmd(cmd_txt);
OleDbParameter par_firstcolumnnum = new OleDbParameter( "@FirstColumnNum ",OleDbType.Integer);
par_firstcolumnnum.Value = str_bigcolumnNum;
OleDbParameter par_firstcolumnname = new OleDbParameter( "@FirstColumnName ",OleDbType.Char);
par_firstcolumnname.Value = str_bigColumnName;
OleDbParameter par_secondcolumnnum = new OleDbParameter( "@SecondColumnNum ", OleDbType.Integer);
par_secondcolumnnum.Value = str_sonColumnNum;
OleDbParameter par_title = new OleDbParameter( "@Title ", str_title);


OleDbParameter par_IsPic = new OleDbParameter( "@IsPic ", str_IsPic);
OleDbParameter par_tag = new OleDbParameter( "@Tag ", str_tag);
OleDbParameter par_ms = new OleDbParameter( "@MS ", str_content);
OleDbParameter par_picadress = new OleDbParameter( "@PicAdress ", str_picaddress);
OleDbParameter par_times = new OleDbParameter( "@Times ", str_count);
OleDbParameter par_Issuedate = new OleDbParameter( "@IssueDate ",OleDbType.Date);
par_Issuedate.Value=date_senddate;
OleDbParameter par_update = new OleDbParameter( "@UpdateDate ",OleDbType.Date);
par_update.Value = date_update;
cmd.Parameters.Add(par_firstcolumnnum);
cmd.Parameters.Add(par_firstcolumnname);
cmd.Parameters.Add(par_Issuedate);
cmd.Parameters.Add(par_ms);
cmd.Parameters.Add(par_picadress);
cmd.Parameters.Add(par_secondcolumnnum);
cmd.Parameters.Add(par_tag);
cmd.Parameters.Add(par_times);
cmd.Parameters.Add(par_title);
cmd.Parameters.Add(par_IsPic);
cmd.Parameters.Add(par_update);

try
{
cmd.ExecuteNonQuery();
}
finally
{

}

[解决办法]
select * from table where num= 'num '
这种写法太蹩脚了.
应该用标准的写法.数字型的直接select * from table where num=1就得了.
[解决办法]
access中最好所有字段名都加上[],偶平时没这习惯,上次就因为一个字段取为number总是提示语发错误,害偶找了半天错!说白了还是基础差:(
还有模糊查找也有一点怪问题,偶在access中的查询里添加查询语句可以查找到,但是在代码里写同样的查询语句就查不到,后来把代码里的*号换成%号问题解决!
[解决办法]
使用标准写法的话,只有存储过程,触发器,自定义函数需要重写在程序里,其他大多是一样的吧!
[解决办法]


帮LZ顶
[解决办法]

[解决办法]
我以前就是遇到,日期存到access里老是错误的日期,后来我只有把日期字段改为字符字段了,
[解决办法]
日期型的语法有点不同:
如:
sql server:
select * from tablename where postdate= ' "+ mydate + " '
Access:
select * from tablename where postdate= '#+ mydate +# '
[解决办法]
常用的:
SQL:
True = "1 "
False = "0 "
Now = "GetDate() "
BoolOrderType = " desc "
DatePart_D = "d "
DatePart_H = "hh "

Access:
True = "True "
False = "False "
Now = "Now() "
BoolOrderType = " asc "
DatePart_D = " 'd ' "
DatePart_H = " 'h ' "

还有删除记录统一使用delete from,不要省略from
嵌套查询时可能个别情况有出入,要具体分析

而且有相当一部分sql的函数在access中是不支持的,简单的查询、更新、删除,注意上面提到的就可以了
[解决办法]
首先是基础数据类型的转换
数据容量的调整
然后就是结构了,比如存储过程要拆开,参数顺序要调整,


TO windstore(雪海飘香)
ACCESS也可以用参数parameter @压参;
但是不支持参数名配对
也就是说 SQL命令中要用 ?问号
然后下边的parameter @要按照命令中从左到右的顺序压参,不然就会错
SQL2000也不支持参数名配对
目前完整支持的只有SQL2005

读书人网 >asp.net

热点推荐