silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,

silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,,第1张

不是很清楚你遇到的问题是不知道怎么用wcf还是补助到怎么用Linq

如果是不知道怎么用wcf,这个一时半会是说不清楚的,建议你看看教程;

如果是不清楚怎么用linq 这个就简单了:

你的接口写成:

//假设你的EntityFramework实例名为:

ExampleEntities edm = new ExampleEntities();

public UserInfo GetUserInfo(int id)

{

//可以用linq to sql,不过不清楚你的数据表结构,这里就不介绍了

//因为linq经常配合ORM共同使用,这里以其中一种EntityFramework为例:

var query = edmUserInfoFirstOrDefault(s => sID == id);

return (UserInfo)query;

}

//上面介绍了linq to Entity的查询方法,关于其它的增删改查的,你可以查看下关于EntityFramework的相关资料,都是很简单的

你在VS中看的数据库是项目中的数据库,你编译时用到的的数据库是debug下的数据库文件,查看你项目中数据库的“复制到输出目录”属性,肯定是始终复制,意思就是每次拟推迟编译的时候会把你项目中的数据库覆盖你debug下的数据库,所以你每次编译后虽然在debug下的数据库成功更改数据了,但是之后就会被外面的数据库覆盖。

解决办法:

在程序的main函数中添加如下代码:

string dataDir = AppDomainCurrentDomainBaseDirectory;

if(dataDirEndsWith(@"\bin\Release\")||dataDirEndsWith(@"\bin\Debug\"))

{

dataDir = SystemIODirectoryGetParent(dataDir)ParentParentFullName;

AppDomainCurrentDomainSetData("DataDirectory", dataDir);

}

放在主窗口代码运行之前,就一劳永逸的解决了这个问题啊

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemLinq;

using SystemText;

using SystemThreadingTasks;

using SystemWindowsForms;

using SystemDataSqlClient;

using SystemNet;

namespace WindowsFormsApplication1

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

//获取本机IP,然后存储在strAddr中

public string getLocalIP()

{

string strHostName = DnsGetHostName(); //得到本机的主机名

IPHostEntry ipEntry = DnsGetHostEntry(strHostName); //取得本机IP

string strAddr = ipEntryAddressList[0]ToString();

return (strAddr);

}

private void button1_Click(object sender, EventArgs e)

{

string username;

string password;

string LocalIP;

string DBIP1 = "";

LocalIP = getLocalIP();

string dataDir = AppDomainCurrentDomainBaseDirectory;

if (dataDirEndsWith(@"\bin\Debug\")

|| dataDirEndsWith(@"\bin\Release\"))

{

dataDir = SystemIODirectoryGetParent(dataDir)ParentParentFullName;

AppDomainCurrentDomainSetData("DataDirectory", dataDir);

}

//定义用户名和密码变量

username = textBox1Text;

password = textBox2Text;

//使用创建数据库连接

using (SqlConnection conn = new SqlConnection(@"Data Source=数据库;Initial Catalog=xxx;User ID=数据库用户名;Password=密码"))

{

connOpen();//打开数据库

//获取数据库中当前登录名的IP字段,存储与DBIP1中

using (SqlCommand getDBIP = connCreateCommand())

{

getDBIPCommandText = "select from LoginDetail where UID='" + username + "'";

using (SqlDataReader DBIP = getDBIPExecuteReader())

if (DBIPRead())

{

DBIP1 = DBIPGetString(DBIPGetOrdinal("IPaddr"));

}

}

using (SqlCommand cmd = connCreateCommand())

{

//查询命令为:查询UserName等于输入的用户名

cmdCommandText = "select from LoginDetail where UID='" + username + "'";

//将查询到的数据保存在reader这个变量里

using (SqlDataReader reader = cmdExecuteReader())

{

//如果readerRead()的结果不为空, 则说明输入的用户名存在

if (readerRead())

{

/从数据库里查询出和用户相对应的PassWorld的值

readerGetOrdinal("PassWord")的作用是得到PassWord的为这行数据中的第几列,返回回值是int

readerGetString()的作用是得到第几列的值,返回类型为String

/

string dbpassword = readerGetString(readerGetOrdinal("PWD"));

//比较用户输入的密码与从数据库中查询到的密码是否一至,如果一至,就登录成功

if (password == dbpassword)

{

if (DBIP1 == "")//如果数据库中当前登录的ID有记录IP地址,则拒绝登录

{

Form1 form1 = new Form1();

linq to sql 是c#的35技术,和adonet基本没有联系,但可以转换成adonet的DataTable,它可以简便的替代你的 adonet的代码,比如你创建一个linq to sql类命名为:DataClasses1,你打开这个,然后添加进你要 *** 作的TALBE,假设为TABLE1,引用这个类时用:DataClasses1DataContext context=new DataClasses1DataContext();然后下面开始写你的查询或增加或删除语句,不熟悉LINQ TO SQL 的人刚开始会被它的复杂弄的头晕,写一段时间就慢慢习惯了,不过说实在的,有些复杂的SQL用LINQ TO SQL写起来简直麻烦的很,比如要用到Group by 等的SQL。我写一个简单的LINQ 转 List 泛型的类,给你参考: public List<myclass> myc = new List<myclass>();

public struct myclass

{

public string ManfaceCode;

public string ProductNumber;

public double ExpectedNumber;

} public void ReturnHList() //vw_生产报关系统_档案H 视图

{

DataClasses1DataContext dclass = new DataClasses1DataContext();

List<myclass> myv = (from cc in dclassCOPTCs //COPTCs 是一个表

join cd in dclassCOPTDs on new { ccTC001, ccTC002 } //COPTDs 这也是一个表

equals new

{

TC001 = cdTD001,

TC002 = cdTD002

}

into x

from cf in xDefaultIfEmpty()

join ma in dclassMOCTAs //MOCTAs 这也是一个表

on new

{

cfTD001,

cfTD002,

cfTD003

}

equals new

{

TD001 = maTA026,

TD002 = maTA027,

TD003 = maTA028

}

where ((new char[] { 'Y', 'y' })Contains(maTA013) &&

new char[] { 'Y', 'y' }Contains(ccTC027)

&& ConvertToDateTime(maTA003) > ConvertToDateTime("2010-07-20")

&& ConvertToDateTime(maTA003) < ConvertToDateTime("2010-12-31")

) select new

{

工单单别 = maTA001,

工单单号 = maTA002,

成品品号 = maTA006,

预计产量 = maTA015

//ma

}

/////ok

into my

select new myclass

{

ManfaceCode=my工单单别+my工单单号,

ProductNumber = my成品品号,

ExpectedNumber = ConvertToDouble(my预计产量),

})ToList();

myc = myv;

} 以上的查询语句应该包括大部分SQL查询的内容了,语句用到了多字段、多表、多条件,如果你细心你会发现LINQ 生成语句其实就是一个查询的SQL,这就是说LINQ 和ADO的本质应该是相同的,都是用SQL去读取表,然后返回数据集。然后接下来的就是把这个List转成DataTable了,这个对你来说估计不难吧?直接用for循环写进去了。 至于ADONET 转 LINQ ,道理是一样的,你把DataTable 转成List,然后再用LINQ 去读这个List 了。这里就不写了。写了这么多,可以了吗?原创哦。

以上就是关于silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,全部的内容,包括:silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,、C# VS2010中linq可以读入数据库,却无法写入数据库、怎么通过C#程序控制数据的读取并写入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9775984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存