GVKun编程网logo

无法使用存储过程pyodbc SQL SERVER创建数据库(无法使用com.mysql.jdbc)

4

在这里,我们将给大家分享关于无法使用存储过程pyodbcSQLSERVER创建数据库的知识,让您更了解无法使用com.mysql.jdbc的本质,同时也会涉及到如何更有效地C#调用ODBC连接SQLS

在这里,我们将给大家分享关于无法使用存储过程pyodbc SQL SERVER创建数据库的知识,让您更了解无法使用com.mysql.jdbc的本质,同时也会涉及到如何更有效地C#调用ODBC连接SQL Server数据库的存储过程、hibernate 调用存储过程 报错 数据库是sqlserver、java – 无法使用JDBC连接到Sql Server数据库、mssql server 创建数据库到存储过程与用户自定义函数的内容。

本文目录一览:

无法使用存储过程pyodbc SQL SERVER创建数据库(无法使用com.mysql.jdbc)

无法使用存储过程pyodbc SQL SERVER创建数据库(无法使用com.mysql.jdbc)

我正在尝试调用从pyodbc创建数据库的存储过程

以下是代码的最小示例

import pyodbcconn = pyodbc.connect("Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=yes;")cursor=conn.cursor()cursor.execute("""\    DECLARE @RC int    DECLARE @ClientName varchar(255)    SET @ClientName = ''Test''    EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName""")conn.commit()

理想情况下,该代码应在SQL Server实例中创建一个名为“ Test ”的数据库。这不会产生任何错误。但是没有创建数据库。

跑步

DECLARE @RC intDECLARE @ClientName varchar(255)SET @ClientName = ''Test''EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName

答案1

小编典典

Python DB API2.0指定默认情况下,应在禁用自动提交的情况下打开连接。但是,许多数据库要求DDL语句
不在 事务内执行。尝试在禁用自动提交的情况下执行DDL语句可能会导致错误或意外结果。

因此,更安全的是确保在启用了自动提交的连接上执行DDL语句。这可以通过autocommit=True在打开连接时进行设置来实现…

cnxn = pyodbc.connect(connection_string, autocommit=True)

…或通过启用autocommit现有连接…

cnxn = pyodbc.connect(connection_string)# ...cnxn.autocommit = True

C#调用ODBC连接SQL Server数据库的存储过程

C#调用ODBC连接SQL Server数据库的存储过程

OdbcConnection con = new OdbcConnection("Driver={SQL Server};server=PC-200201070359;uid=sa;pwd=123;database=test;");
            try
C#调用ODBC连接SQL <wbr>Server数据库的存储过程            {
                con.Open();
                OdbcCommand command = new OdbcCommand();
                command.Connection = con;
                command.CommandType = CommandType.StoredProcedure;
                //command.CommandText = "MaxAge";   //存储过程名称 


                command.CommandText = "{call MaxAge (?, ?,?)}";
                //输入参数
                OdbcParameter para = new OdbcParameter("@Name1", OdbcType.NVarChar, 10);
                para.Value = "James";
                command.Parameters.Add(para);

                //输入参数
                para = new OdbcParameter("@Name2", OdbcType.NVarChar, 10);
                para.Value = "Mary";
                command.Parameters.Add(para);

                //输出参数(参数名称大小写无关)
                para = new OdbcParameter("@MaxAge", OdbcType.Int, 4);
                para.Direction = ParameterDirection.Output;
                command.Parameters.Add(para);


                int i = command.ExecuteNonQuery();  //执行成功返回-1

                string k = command.Parameters["@Maxage"].Value.ToString();
            }
            catch (Exception ex)
C#调用ODBC连接SQL <wbr>Server数据库的存储过程            {

                //throw;
            }

可能遇到的问题:

使用ODBC方法,只能方法时会报这样的异常:ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]过程 ''MaxAge'' 需要参数 ''@Name1'',但未提供该参数。

解决办法:将command.CommandText = "MaxAge";   //存储过程名称 改为 command.CommandText = "{call MaxAge (?, ?,?)}";即可,目前原因未知;前面的方法在sqlclient中是可用的

更多可参看链接:http://www.cnblogs.com/gossip/archive/2009/06/15/1503884.html

hibernate 调用存储过程 报错 数据库是sqlserver

hibernate 调用存储过程 报错 数据库是sqlserver

	public List fy() {
		 List result = (List) this.getHibernateTemplate().execute(new
		 HibernateCallback() {
		 public Object doInHibernate(Session session)
		 throws HibernateException, SQLException {
		 String sql="{Call proc_pages(?,?,?,?,?,?,?,?)}";
		 Query query = session.createSQLQuery(sql);
		 System.out.println(sql);
		  query.setString(0, "tBuilding");
		  query.setString(1, "id");
		  query.setInteger(2, 0);
		  query.setInteger(3, 0);
		  query.setString(4, "*");
		  query.setInteger(5, 10);
		  query.setInteger(6, 1);
		  query.setString(7, "");
		  query.executeUpdate();
		 List list = query.list();
		 System.out.println("lsitlist" + list.size());
		 return list;
		 }
		 });
//		 for (Object tb1 : list) {
//		 Tbuilding tb = (Tbuilding) tb1;
//		 System.out.println("测试数据---------" + tb.getBuildingName());
//		 System.out.println("测试数据---------" + tb.getId());
//		 }
		return result;

	}

存储过程

USE [Test]
GO
/****** 对象:  StoredProcedure [dbo].[proc_pages]    脚本日期: 07/18/2012 11:10:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[proc_pages]
@strTable varchar(50), --表名 
@strColumn varchar(50), --按该列来进行分页 
@intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型 
@intOrder bit, --排序,0-顺序,1-倒序 
@strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段 
@intPageSize int, --每页记录数 
@intPageNum int, --指定页 
@strWhere varchar(800), --查询条件 
@intPageCount int OUTPUT --总页数 
AS 
begin
DECLARE @sql  nvarchar(4000) --用于构造SQL语句
DECLARE @where1 varchar(800) --构造条件语句
DECLARE @where2 varchar(800) --构造条件语句
IF @strWhere is null or rtrim(@strWhere)='''' 
-- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格
BEGIN --没有查询条件 
print ''asdfasd''
SET @where1='' WHERE '' 
SET @where2='' '' 
END 
ELSE 
BEGIN --有查询条件 
SET @where1='' WHERE (''+@strWhere+'') AND '' 
SET @where2='' WHERE (''+@strWhere+'') '' 
END 
set @strColumn = '' '' + @strColumn + '' ''
set @strColumnlist = '' '' + @strColumnlist + '' ''
--构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 )
SET @sql=''SELECT @intPageCount=CEILING((COUNT(*)+0.0)/''
+ CAST(@intPageSize AS varchar)
+ '') FROM '' + @strTable + @where2 
--执行SQL语句,计算总页数,并将其放入@intPageCount变量中
EXEC sp_executesql @sql ,N''@intPageCount int OUTPUT'',@intPageCount OUTPUT 
--将总页数放到查询返回记录集的第一个字段前,此语句可省略
--SET @strColumnlist='' ''+Cast(@intPageCount as varchar(30)) + '' as PageCount,'' + @strColumnlist  
IF @intOrder=0 --构造升序的SQL
SET @sql=''SELECT TOP ''+ CAST(@intPageSize AS varchar) + 
@strColumnlist + 
'' FROM '' + @strTable + @where1 + 
@strColumn + ''>(SELECT MAX(''+@strColumn+'') ''+ 
'' FROM (SELECT TOP ''+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + 
@strColumn + '' FROM ''+ @strTable+@where2+''ORDER BY ''+@strColumn+'') t) ORDER BY ''+ @strColumn 
ELSE --构造降序的SQL 
SET @sql=''SELECT TOP ''+ CAST(@intPageSize AS varchar) + 
@strColumnlist+ 
'' FROM ''+ @strTable + @where1 + 
@strColumn + ''<(SELECT MIN(''+@strColumn+'') ''+ 
'' FROM (SELECT TOP ''+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + 
@strColumn + '' FROM ''+ @strTable+@where2+''ORDER BY ''+@strColumn+'' DESC) t) ORDER BY ''+ 
@strColumn + '' DESC'' 
IF @intPageNum=1--第一页 
SET @sql=''SELECT TOP ''+CAST(@intPageSize AS varchar) + @strColumnlist + '' FROM ''+@strTable+ 
@where2+''ORDER BY ''+@strColumn+CASE @intOrder WHEN 0 THEN '''' ELSE '' DESC'' 
END 
PRINT @sql  
print @intPageCount
--EXEC(@sql) 
end

数据库名字是Test 表名是tBuilding   存储过程的名字是proc_pages

报错信息是:could not execute native bulk manipulation query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query

java – 无法使用JDBC连接到Sql Server数据库

java – 无法使用JDBC连接到Sql Server数据库

我正在尝试使用Netbeans 8连接到sql Server 2012n中已存在的数据库.

使用连接向导我选择sql Server 2012并输入凭据和字段.

但是我收到无法建立连接的消息.

您可以看到输入字段的屏幕截图:

我也尝试使用“localhost”而不是“STIJN”这不起作用.我也尝试使用默认端口“1433”.也没用,但是这应该是什么端口?我在哪里可以看到我正在使用的端口?也许错误在于端口,否则我不知道我在哪里弄错了.

解决方法

转到sql Server配置管理器 – > sql服务器网络配置 – > sqlEXPRESS的协议 – > TCP / IP(双击属性).

在协议页面设置启用为是.
在“IP地址”页面上,滚动到底部.
TCP动态端口:54629
TCP端口:1433
申请并确定.

建立连接:
主持人:localhost
港口:1433
你的凭据
实例字段=空白.

这应该工作.

mssql server 创建数据库到存储过程与用户自定义函数

mssql server 创建数据库到存储过程与用户自定义函数

这里简单的笔记了关于mssql server 创建数据库到存储过程与用户自定义函数方法,有需要的朋友参考一下。

我们今天的关于无法使用存储过程pyodbc SQL SERVER创建数据库无法使用com.mysql.jdbc的分享就到这里,谢谢您的阅读,如果想了解更多关于C#调用ODBC连接SQL Server数据库的存储过程、hibernate 调用存储过程 报错 数据库是sqlserver、java – 无法使用JDBC连接到Sql Server数据库、mssql server 创建数据库到存储过程与用户自定义函数的相关信息,可以在本站进行搜索。

本文标签: