Public Sub ReadServer(ByVal Query As String)
If rs.State = 1 Then
rs.Close
End If
rs.Open Query, cnnMain, adOpenStatic, adLockReadOnly
End Sub
这就是为什么我要为SQL和MySQL创建福彩12选5走势图单独的库,该库仅根据您提供的SQL语句为您完成所有参数构建,连接和命令构建。当我完成工作时,这是另福彩12选5走势图梦想,因为我的项目仍在开发中,可以追溯到2016年,有些甚至是2012年,因为过去几年来没有时间来完成它们。 haha但是,当我这样做时,我将在这里发布它们。最终,我想为其添加映射数据库并为您生成C#所需类的功能。但这不会在以后发布更多版本。但是每个人似乎每次都会写出他们的连接和命令参数。
如果您清楚:你为什么要发表这个声明?
我从来都不是EF的狂热者,只要有手臂,我就会列出一系列问题。我提交的错误从未得到修复,即使今天我也已经报告了这些错误,但仍然存在内存泄漏。如果要求我根据雇主的指示使用EF,我只是拒绝使用EF,并根据我的发现咨询他们,通常会说服他们使用替代方法。我可能应该在上面说过,但是我不需要,因为我注意到OP之前正在阅读福彩12选5走势图主题,以前我已经给出了不使用EF的理由。因此,没有理由进行详细说明。这里有替代方案的列表: 有哪些好的实体框架替代品在论坛中搜索我的名字和EF。您会找到一些帖子,说明为什么我不高度重视EF,而这都是有充分理由的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SQLite;
namespace MyTradeJournal.WinForms.SQLite
{
public class DatabaseConnection
{
private readonly SQLiteConnection sqlConn;
/// <summary>
/// Place the connection string inside the constuctor.
/// </summary>
public DatabaseConnection()
{
SQLiteConnection sQLiteConnection =新的SQLiteConnection(@"数据源= C:\ PosData \ TradeJournal.db;版本= 3;");
sqlConn = sQLiteConnection;
}
public void WriteData(string Query)
{
if (sqlConn.State == System.Data.ConnectionState.Closed)
{
sqlConn.Open();
}
using (SQLiteCommand cmd = new SQLiteCommand(Query, sqlConn))
{
cmd.ExecuteNonQuery();
}
}
public SQLiteDataReader ReadData(string Query)
{
using (SQLiteCommand cmd = new SQLiteCommand(Query, sqlConn))
{
SQLiteDataReader dr = cmd.ExecuteReader();
return dr;
}
}
public void CloseConnection()
{
if (sqlConn.State == System.Data.ConnectionState.Open)
{
sqlConn.Close();
}
}
}
}
为什么不删除它并从需要的任何方法中调用新连接?SQLiteConnection sQLiteConnection =新的SQLiteConnection(@"数据源= C:\ PosData \ TradeJournal.db;版本= 3;");
public void Create_NewUser(TextBox[] tb_controls)
{
using (SQLiteConnection liteConnection = new SQLiteConnection(Con_String))
{
if (liteConnection.State == System.Data.ConnectionState.Closed)
liteConnection.Open();
Command = "INSERT INTO users (username, email, password, name, company_name) VALUES (@username, @email, @password, @name, @company_name)";
SQLiteCommand liteCommand = new SQLiteCommand();
liteCommand.CommandText = Command;
liteCommand.Connection = liteConnection;
liteCommand.Parameters.AddWithValue("@username", tb_controls[0].Text);
liteCommand.Parameters.AddWithValue("@email", tb_controls[1].Text);
liteCommand.Parameters.AddWithValue("@password", Security.Secure_Password);
liteCommand.Parameters.AddWithValue("@name", tb_controls[3].Text);
liteCommand.Parameters.AddWithValue("@company_name", tb_controls[4].Text);
liteCommand.ExecuteNonQuery();
}
}
private void CmdSave_Click(object sender, EventArgs e)
{
DatabaseConnection myDbConn = new DatabaseConnection();
myDbConn.WriteData("INSERT INTO ExchangeSetup " +
"(ExchangeName " +
",ExchangeAPIKey " +
",ExchangeSecret) " +
"VALUES " +
"('" + CboExchange.Text + "' " +
",'" + TxtApiKey.Text + "' " +
",'" + TxtApiSecret.Text + "')");
myDbConn.CloseConnection();
PopulateGrid();
}
SQLiteParameter[] parameters = { new SQLiteParameter
{
ParameterName = "foo",
Value = "bar"
}};
SQLiteParameterCollection
which allows you to AddRange
such as a parameter array.