c#更新数据库数据,由于有太多列,使用update set形式,需要写的语句太长。有别的方法更新数据库数据么

c#更新数据库数据,由于有太多列,使用update set形式,需要写的语句太长。有别的方法更新数据库数据么,第1张

entity 使用对象模式来 *** 作其实列太长的 需要跟新都没什么好办法 最多你写个循环 把跟新参数用键值对的形式拼出来,不过使用拼字符串形式的数据库 *** 作,一定要做好过滤,不然注入攻击一抓一个准

其实两句可用合而为一:

Private cnn As New ADODBConnection

一下是对set的解释:

Set 语句

将对象引用赋给变量或属性。

语法:

Set objectvar = {[New] objectexpression | Nothing}

说明:

Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。

下面的示例说明了如何使用 Dim 来声明 Form1 类型的数组。Form1 实际上还没有实例。然后使用 Set 将新创建的 Form1 的实例的引用赋给 myChildForms 变量。在 MDI 应用程序中可以使用这些代码来创建子窗体。

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量。不过,如果在 Set 语句中使用 New 关键字,那么实际上就会新建一个该对象的实例。

原理是先kill占用了数据库的那个进程,然后设置数据库为多用户模式。

USE master;

Go

DECLARE @SQL VARCHAR(MAX);

SET @SQL=''

SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)

FROM mastersysprocesses

WHERE dbid=DB_ID('数据库名');

EXEC(@SQL);

GO

ALTER DATABASE 数据库名 SET MULTI_USER;

扩展资料:

机制结构

SQL Server 是一种客户机/服务器系统

多年来,SQL Server 一直被认为是一种客户机/服务器系统。事实上,Sybase DataServer(以此为基础开发了原始的 SQL Server)正是第一个作为客户机/服务器系统开发的商用关系数据库系统。那这又说明了什么呢?这不只意味着 SQL Server 是一个双层系统。

从传统上看,双层系统意味着客户机应用程序运行在一台机器上,向另一台计算机上的服务器发送请求。而对于 SQL Server,客户机/服务器意味着 SQL Server 的组成部分,即客户机 API 部分,驻留在处理结构中的远端,与服务器组件本身是分开的。

在典型的双层模型中,客户机程序部分驻留在台式机上,具有大量客户机应用程序逻辑和业务逻辑,并且会直接向数据库系统发出请求。然后,客户机得到服务器响应这些请求所返回的数据。

三层系统也采用了同样的模型。多年以来,SQL Server 一直用在事务处理监视系统中,例如 BEA 的 Tuxedo 以及 Compaq 的 ACMSxp,这些系统早在二、三十年前就采用了典型的三层模型。

三层模型在今天基于 Web 的应用系统中占据了支配地位,这类系统以 Microsoft 的 MTS 以及新的 COM+ 10 为代表。从 SQL Server 的角度看,三层解决方案中的客户机程序是放在中间层的。

中间层直接与数据库交互。实际的桌面,或瘦客户机(Thin Client),使用其他机制并通常直接与中间层交互,而不是直接与数据库系统交互。

参考资料来源:百度百科-sql server

为什么需要多数据库?

默认情况下,Spring Boot使用的是单数据库配置(通过springdatasource配置具体数据库连接信息)。

对于绝大多数Spring Boot应用,这是符合其使用场景的,因为Spring Boot提倡的是微服务理念,每个应用对应一个单独的业务领域。但在某些特殊情况下,一个应用对应多个数据库又是无法避免的,例如实施数据库分库后原本单个数据库变为多个数据库。本文就结合实际代码介绍如何在单个Boot应用中配置多数据库,以及与之相关的Druid,jOOQ,Flyway等数据服务框架的配置改造。

配置示例

DB1,DB2: 两个示例数据库

ServiceA, ServiceB: 分别使用DB1和DB2的服务类

连接池Druid

Druid是阿里巴巴开源的数据库连接池,提供了强大的监控支持,号称Java语言中最好的连接池。

创建两个配置类分别注册对应DB1和DB2的DataSource Bean和TransactionManager Bean。以DB1为例:

Tip: 可以把其中一个配置类中注册的DataSource Bean和DataSourceTransactionManager Bean加上@Primary注解,作为默认装配实例。

// DB1

@Configuration

public class Db1Config {

@Bean(initMethod = "init", destroyMethod = "close")

@ConfigurationProperties(prefix = "dbdb1")

public DataSource dataSource1() {

return new DruidDataSource();

}

@Bean

public DataSourceTransactionManager transactionManager1() {

DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();

transactionManagersetDataSource(dataSource1());

return transactionManager;

}

}

applicationconf中的配置:

# DB1

dbdb1url=jdbc:mysql://127001:3306/db1useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true

dbdb1username=root

dbdb1password=

ORM框架jOOQ

jOOQ是一个开源ORM框架,最大特点是提供类型安全的流式API,支持代码生成。

参照Boot自带的JooqAutoConfiguration,不难写出如下配置类:

@Configuration

public class JooqConfig {

// DB1

@Bean

public DataSourceConnectionProvider dataSourceConnectionProvider1(

@Qualifier("dataSource1") DataSource dataSource1) {

return new DataSourceConnectionProvider(

new TransactionAwareDataSourceProxy(dataSource1));

}

@Bean

public SpringTransactionProvider transactionProvider1(

@Qualifier("transactionManager1") DataSourceTransactionManager txManager1) {

return new SpringTransactionProvider(txManager1);

}

// DB2

//

@Configuration

public static class DslContextConfig {

@Autowired(required = false)

private RecordMapperProvider recordMapperProvider;

@Autowired(required = false)

private Settings settings;

@Autowired(required = false)

private RecordListenerProvider[] recordListenerProviders;

@Autowired

private ExecuteListenerProvider[] executeListenerProviders;

@Autowired(required = false)

private VisitListenerProvider[] visitListenerProviders;

// DSLContext for DB1

@Bean

public DefaultDSLContext dslContext1(@Qualifier("dataSourceConnectionProvider1") DataSourceConnectionProvider connectionProvider1,

@Qualifier("transactionProvider1") SpringTransactionProvider transactionProvider1) {

return new DefaultDSLContext(configuration(connectionProvider1, transactionProvider1));

}

// DSLContext for DB2

//

private DefaultConfiguration configuration(ConnectionProvider connectionProvider, TransactionProvider transactionProvider) {

DefaultConfiguration configuration = new DefaultConfiguration();

configurationsetSQLDialect(SQLDialectMYSQL);

configurationset(connectionProvider);

configurationset(transactionProvider);

if (thisrecordMapperProvider != null) {

configurationset(thisrecordMapperProvider);

}

if (thissettings != null) {

configurationset(thissettings);

}

configurationset(thisrecordListenerProviders);

configurationset(thisexecuteListenerProviders);

configurationset(thisvisitListenerProviders);

return configuration;

}

}

}

服务类

配置好DataSource,TransacationManager和DSLContext之后,服务类的配置就比较简单了,直接引用即可。注意由于存在多套Beans,需要通过@Qualifier注解指定装配实例。

@Transactional("TransactionManager1")//每个事务指定 tx

public class ServiceA {

@Autowired

@Qualifier("dslContext1")

protected DSLContext dsl;

}

数据库迁移框架Flyway

Flyway是一个轻量级的开源数据库迁移框架,使用非常广泛。

参照Boot自带的FlywayAutoConfiguration,同样可以写出如下配置类:

@Configuration

public class FlywayConfig {

@Bean(initMethod = "migrate")

@ConfigurationProperties(prefix = "fwdb1")

public Flyway flyway(@Qualifier("dataSource1") DataSource dataSource1) {

Flyway clinic = new Flyway();

clinicsetDataSource(dataSource1);

return clinic;

}

// DB2

//

/

@see FlywayAutoConfiguration

/

@Bean

@ConfigurationPropertiesBinding

public StringOrNumberToMigrationVersionConverter stringOrNumberMigrationVersionConverter() {

return new StringOrNumberToMigrationVersionConverter();

}

/

Convert a String or Number to a {@link MigrationVersion}

@see FlywayAutoConfiguration

/

private static class StringOrNumberToMigrationVersionConverter

implements GenericConverter {

private static final Set<ConvertiblePair> CONVERTIBLE_TYPES;

static {

Set<ConvertiblePair> types = new HashSet<ConvertiblePair>(2);

typesadd(new ConvertiblePair(Stringclass, MigrationVersionclass));

typesadd(new ConvertiblePair(Numberclass, MigrationVersionclass));

CONVERTIBLE_TYPES = CollectionsunmodifiableSet(types);

}

@Override

public Set<ConvertiblePair> getConvertibleTypes() {

return CONVERTIBLE_TYPES;

}

@Override

public Object convert(Object source, TypeDescriptor sourceType,

TypeDescriptor targetType) {

String value = ObjectUtilsnullSafeToString(source);

return MigrationVersionfromVersion(value);

}

}

}

applicationconf中的配置:

# DB1

fwdb1enabled=true

以上就是关于c#更新数据库数据,由于有太多列,使用update set形式,需要写的语句太长。有别的方法更新数据库数据么全部的内容,包括:c#更新数据库数据,由于有太多列,使用update set形式,需要写的语句太长。有别的方法更新数据库数据么、vb+access数据库编程中,对象变量什么时候用new,什么时候用set,这两个关键字到底有什么涵义、sql server单用户模式下怎么修改为多用户模式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存