VS2012 C#如何储存本地数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2012 C#如何储存本地数据相关的知识,希望对你有一定的参考价值。
我做完的程序想要在别的没有安装数据库的电脑上储存本地数据 比如说程序当前的设置之类的应该如何实现? 求详细讲解
和其他人说的一样,方法很多,如果数据不多,这里推荐一个简单的方法。
以C# winform程序为例
使用其中自带的配置文件的setting.setting,如上图。
使用方法如下string test = Properties.Settings.Default.test;//读取设置值
//根据读取的设置值进行操作
Properties.Settings.Default.test = "test"; //修改设置属性
Properties.Settings.Default.Save();//保存读设置项做的更改,一般在软件关闭的时候使用
详细操作请自行百度
setting上面的Resources.resx是存储资源(图片,声音等)文件的,操作方法类似。
追问方便留下扣扣号吗? 以后方便请教
追答百度私信吧
我能回答的也不多,我是学生,上学期学的C#,只知道一些基础的东西。
如果数据量比加大且结构复杂,可以使用本地数据库sqllite。追问
Sqllite不需要用户的电脑上也安装吗? 如果只是VS没有办法实现吗?
追答sqllite不需要用户电脑安装,只需要vs引用sqllite的dll就够了。
如何通过C#代码导出数据库并在本地导入?
【中文标题】如何通过C#代码导出数据库并在本地导入?【英文标题】:How to export database and import it locally by C# code? 【发布时间】:2015-01-26 09:52:05 【问题描述】:如何通过 C# 应用程序将数据库从远程服务器“克隆”到 LocalDB 数据库?不需要与远程数据库建立关系。
背景
应用程序是使用 .NET 4.5.2 用 C# 编写的,支持两种模式 - 连接到远程 MS SQL Server 数据库的联机模式和连接到LocalDB
数据库的脱机模式。该应用程序主要针对较新版本的服务器(如果重要,只支持 2014 版是可以的)。
在用户下线之前,它应该要求应用程序将远程数据库克隆到LocalDB
数据库(本地数据库被完全覆盖)。本地数据库应该独立于远程数据库,即没有从属或复制。
在线和离线连接字符串都包含各自数据库的名称。应用程序本身不直接知道数据库名称或表名称,因为这是由连接字符串和实体框架管理的。
问题
如何将远程数据库“克隆”到LocalDB
数据库(远程数据库名称和LocalDB
数据库名称可能不同)?
我更喜欢不需要启动外部程序的解决方案,但这不是硬性要求。
问题
通过实体框架复制没有跟踪实体是不可接受的慢。
我知道BACKUP DATABASE
和RESTORE DATABASE
命令,但我发现了以下困难:
他们要求我指定数据库的名称。有没有办法将它们默认为连接字符串中指定的初始数据库?
RESTORE DATABASE
命令包含光盘上各个数据文件的名称和路径(MOVE
部分)。有没有办法通过仅指定数据库名称而不提供数据文件路径来处理它?或者如何通过 SQL 命令获取数据文件路径(要获取文件名,我将创建一个空白数据库,获取文件名,可选择删除数据库并使用检索到的文件名)?
有更好的方法吗?
【问题讨论】:
我建议使用 SqlBulkCopy 类。它在您的标签中,但您根本没有在文本中提及它。你试过了吗? 谢谢,我不知道它实际上是一个类。感谢您的建议,我找到了codeproject.com/Articles/18418/… 并使用提供的PerformBulkCopy
示例代码来构建实际代码。
我建议使用 SSIS 包来获取最新数据。您可以使用它进行增量或完全刷新。
我很抱歉之前没有说明。用户可以在离线运行时进行(非常有限的)一组更改。然后,当切换到在线时,应用程序会在在线数据上模拟这些变化。因此,为了安全起见,我更喜欢完全重写离线数据库。 SSIS 不包含在 Express 版本中,因此它可能会让我们的生活更加艰难(数据库服务器上的应用程序会产生非常少的流量,因此如果没有更好的部署,Express 版本就可以了)。
截断表+老派插入到本地数据库中会起作用。或者 SqlBulkCopy 。您最大的表中有多少条记录?
【参考方案1】:
我使用我创建的存储过程,但首先你需要创建一个链接服务器:
IF EXISTS(SELECT name FROM sys.servers WHERE name = 'SERVER')
BEGIN--
EXEC sp_dropserver 'SERVER', 'droplogins'
END
/****** Object: LinkedServer [SERVER] create LinkedServer ******/
EXEC master.dbo.sp_addlinkedserver
@server = N'SERVER',
@srvproduct=N'SQLNCLI',
@provider=N'SQLNCLI',
@datasrc=N'192.168.1.1' -- IP address of a server
/* Add login data*/
EXEC sp_addlinkedsrvlogin
@useself='FALSE',
@rmtsrvname='SERVER',
@rmtuser='User',
@rmtpassword='Pass'
然后您可以在本地服务器上创建存储过程或直接从应用程序执行查询,同样为了安全我在此示例中使用事务:
USE [DB]
GO
/****** Object: StoredProcedure [dbo].[backupdatabase] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[backupdatabase]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
TRUNCATE TABLE [dbo].[table_1]
INSERT INTO [dbo].[table_1]
SELECT * FROM [SERVER].[DB].[dbo].[table_1]
TRUNCATE TABLE [dbo].[table_2]
INSERT INTO [dbo].[table_2]
SELECT * FROM [SERVER].[DB].[dbo].[table_2]
TRUNCATE TABLE [dbo].[table_3]
INSERT INTO [dbo].[table_3]
SELECT * FROM [SERVER].[DB].[dbo].[table_3]
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END
END CATCH
END
【讨论】:
以上是关于VS2012 C#如何储存本地数据的主要内容,如果未能解决你的问题,请参考以下文章
Lightswitch无法连接到本地开发的数据库(VS 2012)