从 Visual Studio C# 和 SQL Compact(连接、选择、插入)开始?

Posted

技术标签:

【中文标题】从 Visual Studio C# 和 SQL Compact(连接、选择、插入)开始?【英文标题】:Basic start with Visual Studio C# and SQL Compact (connect, select, insert)? 【发布时间】:2012-03-22 07:39:14 【问题描述】:

我正在尝试使用 SQL CE 学习 C#,以便我的程序可以记住内容。

我已经创建了一个数据库并且可以连接到它:

SqlCeConnection conn = 
         new SqlCeConnection(@"Data Source=|DataDirectory|\dbJournal.sdf");
conn.Open();

它连接正确,我猜是因为如果我将 dbJournal.sdf 重命名为错误的东西,它就不能正确调试。

假设我想做一个简单的 SELECT 查询。

(SELECT * FROM tblJournal)

这是怎么做到的?

那么简单的插入呢?

(INSERT TO tblJournal (column1, column2, column2) VALUES 
                                        (value1, value2, value3))

我已经习惯了 phpmysql(如你所见:o))

【问题讨论】:

@gideon,感谢您的编辑。如何制作代码块?最好的问候 您只需要选择文本并按Ctrl + k它会将文本缩进4个空格,将其格式化为代码块。 【参考方案1】:

@Chuck 提到了 EntityFramework,它简化了事情并为您完成了编写 sql 的所有工作。

但是这里有一个基本的 ADO.NET 方法,我将在下面描述。

这些类遵循标准模式,因此要从 sql server 或其他数据库中插入/读取,有精确的副本类,例如 SqlConnectionOleDbConnectionOleDbCommand

这是最简单的 ado.net 方法:

using( SqlCeConnection conn =
          new SqlCeConnection(@"Data Source=|DataDirectory|\dbJournal.sdf") )
using( SqlCeCommand cmd = conn.CreateCommand() )

  conn.Open();
  //commands represent a query or a stored procedure       
  cmd.CommandText = "SELECT * FROM tblJournal";
  using( SqlCeDataReader rd = cmd.ExecuteReader() )
  
     //...read
  
  conn.Close();

然后读取数据:

while (rd.Read())
//loop through the records one by one
     //0 gets the first columns data for this record
     //as an INT
     rd.GetInt32(0);
     //gets the second column as a string
     rd.GetString(1);

读取数据的好方法是这样的:

using( SqlCeDataAdapter adap = 
          new SqlCeDataAdapter("SELECT * FROM tblJournal", "your connection") )

  //the adapter will open and close the connection for you.
  DataTable dat = new DataTable();
  adap.Fill(dat);

这会将整个数据一次性放入DataTable 类中。

插入数据:

SqlCeCommand cmdInsert = conn.CreateCommand();
cmdInsert.CommandText = "INSERT TO tblJournal (column1, column2, column2) 
                           VALUES (value1, value2, value3)";
cmdInsert.ExecuteNonQuery();

【讨论】:

这是一组很好的例子,但不应该有 conn.Close();什么地方? @gideon 您的连接在 using 块中...这是否意味着连接将被自动关闭/处理? @Prokurors 是的,其继承链中的适配器继承自System.ComponentModel.Component,即IDisposable,因此它有点暗示它将进行清理。适配器也拥有连接,因为(从我的示例中)适配器接受一个字符串并创建连接。所以我的期望是它会关闭连接。【参考方案2】:

如果您刚开始学习,我建议您使用 LINQ 进行查询。

这是展示 LINQ 功能的 MSDN 文章。

http://msdn.microsoft.com/en-us/library/bb425822.aspx

使用 LINQ 可以轻松完成每个查询。例如,您可以像这样编写您的选择查询

from journal in TblJournal select journal 

或者只是

context.TblJournal

【讨论】:

【参考方案3】:

同样为了提高性能,您最好在使用 SQL CE(相对于其他标准 sql 数据库)时始终保持连接开放

【讨论】:

以上是关于从 Visual Studio C# 和 SQL Compact(连接、选择、插入)开始?的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 数据库/Visual Studio C#:日期处理

方法名称预期 C# SQL Server Visual Studio 2019 [重复]

visual studio编写c#项目,建立sql数据库,如何让表中某一列的值自动生成,不重复,例如从1开始自动加1。

visual studio2017使用c#删除SQL数据库里的一行

visual studio2017使用c#删除SQL数据库里的一行

C# Visual Studio - 将 SQL 表数据输出到 Datagridview