VC连接程序时报"写入程序数据库xxx错误

VC连接程序时报"写入程序数据库xxx错误,第1张

是你代码的实现方式有问题

我估计是你在每次结束后没有释放连接,并且你没有用多线程进行 *** 作,所以第一次能运行,但是第二次运行的时候第一次的连接还没有释放,这样资源会被独享,所以会有不能写入的错误

建议修改一下你的代码

这并不是VC的问题

using System

using System.Collections.Generic

using System.ComponentModel

using System.Data

using System.Drawing

using System.Linq

using System.Text

using System.Threading.Tasks

using System.Windows.Forms

using System.Data.SqlClient

using System.Net

namespace WindowsFormsApplication1

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent()

}

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

public string getLocalIP()

{

string strHostName = Dns.GetHostName()//得到本机的主机名

IPHostEntry ipEntry = Dns.GetHostEntry(strHostName)//取得本机IP

string strAddr = ipEntry.AddressList[0].ToString()

return (strAddr)

}

private void button1_Click(object sender, EventArgs e)

{

string username

string password

string LocalIP

string DBIP1 = ""

LocalIP = getLocalIP()

string dataDir = AppDomain.CurrentDomain.BaseDirectory

if (dataDir.EndsWith(@"\bin\Debug\")

|| dataDir.EndsWith(@"\bin\Release\"))

{

dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName

AppDomain.CurrentDomain.SetData("DataDirectory", dataDir)

}

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

username = textBox1.Text

password = textBox2.Text

//使用创建数据库连接

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

{

conn.Open()//打开数据库

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

using (SqlCommand getDBIP = conn.CreateCommand())

{

getDBIP.CommandText = "select * from LoginDetail where UID='" + username + "'"

using (SqlDataReader DBIP = getDBIP.ExecuteReader())

if (DBIP.Read())

{

DBIP1 = DBIP.GetString(DBIP.GetOrdinal("IPaddr"))

}

}

using (SqlCommand cmd = conn.CreateCommand())

{

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

cmd.CommandText = "select * from LoginDetail where UID='" + username + "'"

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

using (SqlDataReader reader = cmd.ExecuteReader())

{

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

if (reader.Read())

{

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

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

*reader.GetString()的作用是得到第几列的值,返回类型为String.

*/

string dbpassword = reader.GetString(reader.GetOrdinal("PWD"))

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

if (password == dbpassword)

{

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

{

Form1 form1 = new Form1()

您好,希望以下回答能帮助您

首先,添加一个Data数据控件,设置它的DatabaseName和RecordSource属性,

strPath = App.Path

If Right(strPath, 1) <>"\" Then

 strPath = strPath &"\"

MyData.DatabaseName = strPath &"ExampleDB.mdb" '数据库存地址

MyData.RecordSource = "Info" '表名

第二步,添加Image控件用来显示图片,设置它的DataSource和DataField属性。例如本例中: Image1.DataSource="MyData"和Image1.DataField=" MyPhoto" 。然后设置其它具有数据绑定功能的控件用来显示所要的其它内容,经过这两步的 *** 作,运行程序就可以显示你要的数据了。

2、向数据库中添加需要存储的图片

首先,利用数据控件所具有的AddNew属性,添加一个按钮,双击后添加如下代码MyData.Recordset.AddNew

第二步,为Image控件图片指定图片路径Image1.Picture = LoadPicture("图片路径"),经过这两步的 *** 作,就可以向数据库中添加图片了。

这种方法最简单快捷,要写的代码量很少。但是这种方法在运行速度和灵活性方面有一定的限制,适合于初学者和一些简单的应用,要想灵活多变的显示图像,下面介绍的方法或许更适应您的要求。

利用编写代码实现图片的存储与显示

这种方法相对于方法一来说,代码量大,但是它 *** 作灵活,能够满足多样形式下的 *** 作,受到更多编程者的青睐。但是涉及到的知识面相对要多一些,不仅要掌握数据库的 *** 作方法,还要二进制文件的读写作进一步的了解。关于数据库及二进制文件的基本 *** 作很多参考书上都介绍的比较详细,需要时请查阅即可。在编程之前把本部分用到的变量说明如下:

Dim RS As New ADODB.Recordset

Dim Chunk() As Byte

Const ChunkSize As Integer = 2384

Dim DataFile As Integer, Chunks, Fragment As Integer

Dim MediaTemp As String

Dim lngOffset, lngTotalSize As Long

Dim i As Integer

1、从数据库中显示所需要的图片

第一步首先打开数据库,看有没有要查找的内容,有则继续执行,没有就退出

RS.Source = "select * from Info Where Name='" &sparaName &"'"

RS.ActiveConnection = "UID=PWD=DSN=TestDB"

RS.Open

If RS.EOF Then RS.cCose : Exit Sub

第二步,读出长二进制数据即图片数据,把它转换成图片文件, *** 作过程如下

MediaTemp = strPath &"picturetemp.tmp"

DataFile = 1

Open MediaTemp For Binary Access Write As DataFile

lngTotalSize = RS!MyPhoto.ActualSize

Chunks = lngTotalSize \ ChunkSize

Fragment = lngTotalSize Mod ChunkSize

ReDim Chunk(Fragment)

Chunk() = RS!MyPhoto.GetChunk(Fragment)

Put DataFile, , Chunk()

For i = 1 To Chunks

ReDim Chunk(ChunkSize)

Chunk() = RS!MyPhoto.GetChunk(ChunkSize)

Put DataFile, , Chunk()

Next i

Close DataFile

如您还有疑问可继续追问。


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

原文地址:https://54852.com/sjk/6771130.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存