C# VS2010中linq可以读入数据库,却无法写入数据库
用C#建立了一个窗口应用程序,其中建立了一个数据库,然后建立了一个linqtosql文件,并把数据库中的表拖了进来。程序实际运行中,能够读入数据库,却无法对数据库进行数据...
用C#建立了一个窗口应用程序,其中建立了一个数据库,然后建立了一个linq to sql文件,并把数据库中的表拖了进来。程序实际运行中,能够读入数据库,却无法对数据库进行数据修改。
数据修改部分代码如下:
HotelDatabaseClassesDataContext db = new HotelDatabaseClassesDataContext();
/*把一个表中的数据全部删除*/
var delete1 = from deletetable1 in db.Standardroom_info_table select deletetable1;
db.Standardroom_info_table.DeleteAllOnSubmit(delete1);
db.SubmitChanges();/*执行这句后表中数据还在,没有删除*/
/*循环修改表中数据*/
for (int i = 0; i < 40; i++) {
var query1 = from table1 in db.Room_info_table
where table1.roomid == common.Room1[i].Roomnum
select table1;
var q = query1.First(); /*对表中数据进行修改*/ q.isclear = common.Room1[i].Needclear;
q.isrepair = common.Room1[i].Needrepair;
q.message = common.Room1[i].Words;
db.SubmitChanges();/*用断点已经确定q中数据已经发生了更改,但执行这句后表中对应数据没有改变,刷新了表,点击执行sql,都没有变化*/
for (int j = 0; j < common.Room1[i].Timelist.Count; j++) {
/*在表中插入一个新行*/
Standardroom_info_table t = new Standardroom_info_table();
t.roomid = common.Room1[i].Roomnum;
t.customid = common.Room1[i].Timelist[j].customerid;
t.startdate = common.Room1[i].Timelist[j].startime;
t.enddate = common.Room1[i].Timelist[j].endtime;
t.customname = common.Room1[i].Timelist[j].customername;
t.customphone = common.Room1[i].Timelist[j].customerphone;
t.isaacount = false;
/*断点中t均被赋值*/
db.Standardroom_info_table.InsertOnSubmit(t); db.SubmitChanges();/*表中没有添加的数据*/
}
}
Application.Exit();
以上,就是问题所在,数据库完全可以读入,就是无法写入数据库,就大神解答······如果解决不了,提供另一种写入数据库的方法,能像linq一样简单的 展开
数据修改部分代码如下:
HotelDatabaseClassesDataContext db = new HotelDatabaseClassesDataContext();
/*把一个表中的数据全部删除*/
var delete1 = from deletetable1 in db.Standardroom_info_table select deletetable1;
db.Standardroom_info_table.DeleteAllOnSubmit(delete1);
db.SubmitChanges();/*执行这句后表中数据还在,没有删除*/
/*循环修改表中数据*/
for (int i = 0; i < 40; i++) {
var query1 = from table1 in db.Room_info_table
where table1.roomid == common.Room1[i].Roomnum
select table1;
var q = query1.First(); /*对表中数据进行修改*/ q.isclear = common.Room1[i].Needclear;
q.isrepair = common.Room1[i].Needrepair;
q.message = common.Room1[i].Words;
db.SubmitChanges();/*用断点已经确定q中数据已经发生了更改,但执行这句后表中对应数据没有改变,刷新了表,点击执行sql,都没有变化*/
for (int j = 0; j < common.Room1[i].Timelist.Count; j++) {
/*在表中插入一个新行*/
Standardroom_info_table t = new Standardroom_info_table();
t.roomid = common.Room1[i].Roomnum;
t.customid = common.Room1[i].Timelist[j].customerid;
t.startdate = common.Room1[i].Timelist[j].startime;
t.enddate = common.Room1[i].Timelist[j].endtime;
t.customname = common.Room1[i].Timelist[j].customername;
t.customphone = common.Room1[i].Timelist[j].customerphone;
t.isaacount = false;
/*断点中t均被赋值*/
db.Standardroom_info_table.InsertOnSubmit(t); db.SubmitChanges();/*表中没有添加的数据*/
}
}
Application.Exit();
以上,就是问题所在,数据库完全可以读入,就是无法写入数据库,就大神解答······如果解决不了,提供另一种写入数据库的方法,能像linq一样简单的 展开
4个回答
展开全部
你在VS中看的数据库是项目中的数据库,你编译时用到的的数据库是debug下的数据库文件,查看你项目中数据库的“复制到输出目录”属性,肯定是始终复制,意思就是每次拟推迟编译的时候会把你项目中的数据库覆盖你debug下的数据库,所以你每次编译后虽然在debug下的数据库成功更改数据了,但是之后就会被外面的数据库覆盖。
解决办法:
在程序的main函数中添加如下代码:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Release\")||dataDir.EndsWith(@"\bin\Debug\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
放在主窗口代码运行之前,就一劳永逸的解决了这个问题啊
解决办法:
在程序的main函数中添加如下代码:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Release\")||dataDir.EndsWith(@"\bin\Debug\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
放在主窗口代码运行之前,就一劳永逸的解决了这个问题啊
展开全部
你的语句暂没看出问题。建议在大量修改或删除数据时直接用sql语句或存储过程。linq本身就是一种查询的用法,加上linq to sql也最好只用来查询。
所以,在.net4里linq to sql 基本已被entity framewrok替代。后者完全以ORM的姿态出现,建议使用
所以,在.net4里linq to sql 基本已被entity framewrok替代。后者完全以ORM的姿态出现,建议使用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码应该没有错。我这里也经常这样调用查找删除和修改数据库数据。
不过你可以再检查一下你查看的数据库是不是项目的Linq To Sql里面连接的数据库。有没有完全的读写权限。
不过你可以再检查一下你查看的数据库是不是项目的Linq To Sql里面连接的数据库。有没有完全的读写权限。
更多追问追答
追问
应该是吧,我直接在数据库中改数据,读出来的结果也跟着改变了。至于读写权限,应该怎么查看啊
追答
你都可以改了,那就肯定有权限。而且你改的数据立马可以在VS里面查询,说明是一个数据库。
你查看数据库的时候页面刷新了没啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你知道SubmitChanges在什么时候调用么?你InsertOnSubmit读读是什么意思?你要InsertOnSubmit以后再调用SubmitChanges
更多追问追答
追问
我是在InsertOnSubmit后调用的啊
追答
你所有插入之后调用Submit,不是插一句就Submit一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询