如何用SQL语言从wincc数据库获取数据,实时获取与获取保存的数据有什么区别?

如何用SQL语言从wincc数据库获取数据,实时获取与获取保存的数据有什么区别?,第1张

步骤1:在SQLSERVER中设一个远程登陆的账号sa, 密码也设置xxx(自己定)

(SQL配置管理器中,把通信协议TCP/IP相关的服务都启用

在SQL中,安全性---登陆账号---SA的属性---状态—启用授权登陆和允许访问SQLSERVER引擎 )

以上设备和配置保证模仿远程用户来我这个计算机SQLSEVER服务器访问数据库.

二 载入系统的类包/名字空间

using System.Data

using System.Data.SqlClient

三 建立连接对象sqlconnection 专门负责与数据库服务器连接

四 定义一个sqldatareader对象,专门从数据库指定表中读出数据

五 定义一个SQL查询命令对象 sqlcommand ,让它负责从数据库去 *** 作读,并把读到结果数据交给sqldatareader对象

protected void Button1_Click(object sender, EventArgs e)

{

String mys = "xxxxdatabase= xxxxUser ID=xxxpwd=xxxxTrusted_Connection=no" //连接串

SqlConnection myc = new SqlConnection(mys)//定义一个连接对象myc,负责去连接mys串定义的服务器和数据库

myc.Open()

Response.Write("连接成功")

//准备读出数据

SqlDataReader myread

string sql="查询语句"

SqlCommand mycom = new SqlCommand(sql , myc)

//定义mycom,在myc这个数据连接中去执行指定的select查询命令

myread = mycom.ExecuteReader()//把mycom的执行查询的结果数据交给myread

while (myread.Read()) //遍历表中的所有行,read( )一次,可读一行,往下跳

{

//从查询结果中取一行出来

for (int i = 0i <myread.FieldCount i++)

Response.Write(myread[i].ToString())

Response.Write("<br>")

}

myc.Close()

}

在Sql

Server中存储、读写Word文件,需要将指定表字段添加为Image类型,示例表结构为:

1

CREATE

TABLE

CONTRACTS

(

2

ID

VARCHAR

(50),

3

CONTRACT_FILE

IMAGE

4

)

CONTRACT_FILE字段就是要存储Word文件的字段,在存储前,有一个小插曲,你需要将Word文件转换为byte数组,可参考以下代码实现:

1

//将文件转换为byte数组

2

public

static

byte[]

File2Bytes(string

fileName)

3

{

4

FileStream

fs

=

new

FileStream(fileName,FileMode.OpenOrCreate,

FileAccess.Read)

5

byte[]

fileDatas

=

new

byte[fs.Length]

6

fs.Read(fileDatas,

0,

System.Convert.ToInt32(fs.Length))

7

fs.Close()

8

return

fileDatas

9

}

接下来就是将转换后的byte[]数组存储到SqlServer的对应字段中,具体实现代码可看如下代码段:

01

//将文件存储到数据库

02

public

bool

UpdateContractFile(string

id,

byte[]

fileBytes)

03

{

04

string

sql

=

"UPDATE

CONTRACTS

SET

CONTRACT_FILE=@CONTRACT_FILE

WHERE

ID=@ID"

05

using

(SqlConnection

conn

=

new

SqlConnection(this.m_DataAccess.ConnectString))

06

{

07

conn.Open()

08

using

(SqlCommand

cmd

=

new

SqlCommand())

09

{

10

cmd.Connection

=

conn

11

cmd.CommandText

=

sql

12

cmd.Parameters.Clear()

13

cmd.Parameters.Add(new

SqlParameter("@CONTRACT_FILE",

SqlDbType.Image))

14

cmd.Parameters["@CONTRACT_FILE"].Value

=

fileBytes

15

cmd.Parameters.Add(new

SqlParameter("@ID",

SqlDbType.VarChar))

16

cmd.Parameters["@ID"].Value

=

id

17

return

cmd.ExecuteNonQuery()

>

0

?

true

:

false

18

}

19

}

20

}

同时,因之前转换了数据类型,所以从数据库中读取Word文件时,要先将Image类型的字段转换为bytes[],代码如下:

01

//通过ID获取文件byte数组

02

public

byte[]

GetContractFile(string

id)

03

{

04

string

sql

=

"SELECT

CONTRACT_FILE

FROM

CONTRACTS

WHERE

ID='{0}'"

05

sql

=

string.Format(sql,

id)

06

object

contractFile

07

contractFile

=

this.m_DataAccess.ExecuteScalar(sql)

08

if

(contractFile

==

null)

09

{

10

return

new

byte[0]

11

}

12

else

13

{

14

return

(byte[])contractFile

15

}

16

}

在获取到文件的byte[]后,将该文件再通过文件流存储为Word文件,以下代码可实现此功能:

01

//将byte[]数组存储为Word文件

02

byte[]

fileBytes

=

this.m_ContractsBusiness.GetContractFile(id)

03

if

(fileBytes.Length

==

0)

04

{

05

XMessageBox.ShowError("未找到合同文件!")

06

return

07

}

08

SaveFileDialog

sfd

=

new

SaveFileDialog()

09

sfd.Filter

=

"Word文件(*.doc)|*.doc"

10

if

(sfd.ShowDialog()

==

System.Windows.Forms.DialogResult.OK)

11

{

12

try

13

{

14

string

saveFileName

=

sfd.FileName

15

int

arraysize

=

new

int()

16

arraysize

=

fileBytes.GetUpperBound(0)

17

FileStream

fs

=

new

FileStream(saveFileName,

FileMode.OpenOrCreate,

FileAccess.Write)

18

fs.Write(fileBytes,

0,

arraysize)

19

fs.Close()

20

if

(XMessageBox.ShowQuestion("文件存储成功,是否立即打开文件?")

==

21

System.Windows.Forms.DialogResult.Yes)

22

{

23

Process.Start(saveFileName)

24

}

25

}

26

catch

(Exception

ex)

27

{

28

XMessageBox.ShowError(" *** 作失败!")

29

}

上面的几段代码只是核心代码,并不是完整的代码段,用时候要看清,自己再修改下。

MS SQL Server 2005 及其后版本 可直接指定 数据写向哪个 “数据库” 。

示例,先在MS SQL Server中手动建立一个数据库“TESTDB”

然后在任一数据库查询状态运行下面语句:

SELECT  'ABC' AS TESTF1 

INTO TESTDB.DBO.TESTTB1  //插入到TESTDB数据库中的dbo架构下去,作为TESTTB1表。

请参考理解上面语句,就明白怎么做了。

如果是不同实例之间,甚至不同的计算机之间,那么,一般做不到,也不建议。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存