首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

请教下将MS SQL转换为ACCESS时候数据库操作语句要注意什么有关问题呢?答全就给分,

2012-03-07 
请问下将MS SQL转换为ACCESS时候数据库操作语句要注意什么问题呢?答全就给分,急!本人做了一个程序,由于需

请问下将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

热点排行