找回密码
 加入
搜索
查看: 3818|回复: 5

[网络通信] [已解决]关于mssql插入数据过程

[复制链接]
发表于 2013-10-19 23:09:10 | 显示全部楼层 |阅读模式
本帖最后由 anypac 于 2013-10-22 15:44 编辑

这个mssql.au3文件是在论坛下到的,下面是其中一个过程,我发现这个过程不能写入一行数据或多行数据,只能写入一列数据或者一个数据,请问一下论坛的老大们是我不会用还是这个过程的问题,我是怎么尝试都没法写入一行或多行数据。。。。。新人求教
;===============================================================================
;
; 函数名称.........:    _MSSQL_AddRecord
; 描述.............:    在数据库表中插入一个或多个新的数值
; 语法.............:    _MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE, $condition)
; 参数(s)..........:    $oConnectionObj = Object, returned by _MSSQL_Con
;                       $sTable = 表名
;                       $Values = 要插入到表中的值
;                       $UNIQUE = [可选参数] 设置为 True 使用条件模式, 避免重复数据
;                       $condition = [可选参数] 条件模式, 如果避免重复数据的条件.
; 要求.............:    You need to add a Value for each Column in the Table
;                       If $Values is an Array , it has to be indexed 1,
;                       If $Values is a String , it has to be formated like this:
;                       - 'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value n'
; 返回值(s)........:    成功 - 1
;                       失败 - 0, sets @error
;                       |1 - $oConnectionObj is not an object
;                       |2 - $condition was not set
;                       |3 - Only returned if $UNIQUE = True
;                               - All Values already in Database
; 作者.............:    TheLuBu <LuBu@veytal.com>
;
;===============================================================================
Func _MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE = False, $condition = "")
        Local $str, $check
        If IsObj($oConnectionObj) And Not @error Then
                If IsArray($Values) Then
                        If UBound($Values, 2) = 0 Then
                                $str = "INSERT INTO " & $sTable & " VALUES('"
                                For $grades = 1 To UBound($Values) - 1
                                        If $UNIQUE = False Then
                                                $str &= $Values[$grades] & "', '"
                                        Else
                                                If $condition = "" Then Return SetError(2, 0, 0)
                                                $check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
                                                If @error = 4 Then
                                                        $str &= $Values[$grades] & "', '"
                                                EndIf
                                        EndIf
                                Next
                                $str = StringTrimRight($str, 3) & ");"
                                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $str = ' & $str & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                                If StringRight($str, 7) = "VALUE);" Then Return SetError(3, 0, 0)
                                $oConnectionObj.execute($str)
                                Return 1
                        Else
                                For $rows = 1 To UBound($Values) - 1
                                        $str = "INSERT INTO " & $sTable & " VALUES('"
                                        For $grades = 1 To UBound($Values, 2) - 1
                                                If $UNIQUE = False Then
                                                        $str &= $Values[$rows][$grades] & "', '"
                                                Else
                                                        If $condition = "" Then Return SetError(2, 0, 0)
                                                        $check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
                                                        If @error = 4 Then
                                                                $str &= $Values[$rows][$grades] & "', '"
                                                        EndIf
                                                EndIf
                                        Next
                                        $str = StringTrimRight($str, 3) & ");"
                                        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $str = ' & $str & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                                        If StringRight($str, 7) = "VALUE);" Then Return SetError(3, 0, 0)
                                        $oConnectionObj.execute($str)
                                Next
                                Return 1
                        EndIf
                Else
                        If $UNIQUE = False Then
                                $str = "INSERT INTO " & $sTable & " VALUES(" & $Values & ");"
                        Else
                                If $condition = "" Then Return SetError(2, 0, 0)
                                $check = _MSSQL_GetRecord($oConnectionObj, $sTable, "*", $condition)
                                If @error = 4 Then
                                        $str = "INSERT INTO " & $sTable & " VALUES(" & $Values & ");"
                                Else
                                        Return SetError(3, 0, 0)
                                EndIf
                        EndIf
                        $oConnectionObj.execute($str)
                        Return 1
                EndIf
        Else
                Return SetError(1, 0, 0)
        EndIf
EndFunc   ;==>_MSSQL_AddRecord
 楼主| 发表于 2013-10-19 23:11:34 | 显示全部楼层
以下是这个过程作者给出的范例~~~请大家指教一下
$IP = "192.168.1.100"; IP地址
$USER = "sa"; 连接帐号
$PASS = ""; 连接密码
$DATABASE = "TESTDATA"; 数据库名

Example_1(); 示例 1 在数据库表中插入一个数值

Example_2(); 示例 1 在数据库表中插入一组数值

Func Example_1()
        ; 表名
        $TableName_1 = "TestTable1"
        
        ; 连接数据库
        $sqlCon = _MSSQL_Con($IP, $USER, $PASS, $DATABASE)
        
        ; 在数据库中创建表,默认自动生成 ID 列
        _MSSQL_CreateTable($sqlCon, $TableName_1)
        
        ; 创建一个或多个新的列
        _MSSQL_CreateColumn($sqlCon, $TableName_1, "TestColumn VARCHAR(150)")
        
        ; 在数据库表中插入一个数值,使用条件方式,避免插入重复数据
        _MSSQL_AddRecord($sqlCon, $TableName_1, "'Value9'", True, "WHERE TestColumn = 'Value9'")
        
        ; 关闭数据库连接
        _MSSQL_End($sqlCon)
EndFunc   ;==>Example_1

Func Example_2()
        Dim $TestArray1[10]
        $TestArray1[1] = "VALUE1"
        $TestArray1[2] = "Value2"
        $TestArray1[3] = "Value3"
        $TestArray1[4] = "Value4"
        $TestArray1[5] = "Value5"
        $TestArray1[6] = "Value6"
        $TestArray1[7] = "Value7"
        $TestArray1[8] = "Value8"
        $TestArray1[9] = "123456789"
        
        ; 表名
        $TableName_2 = "TestTable2"
        
        ; 连接数据库
        $sqlCon = _MSSQL_Con($IP, $USER, $PASS, $DATABASE)
        
        ; 在数据库中创建表,默认自动生成 ID 列
        _MSSQL_CreateTable($sqlCon, $TableName_2)
        
        ; 创建一个或多个新的列
        _MSSQL_CreateColumn($sqlCon, $TableName_2, "TestColumn VARCHAR(150)")
        
        ; 在数据库表中插入一组数值,由于没有使用条件方式,会出现重复数据
        For $i = 1 To UBound($TestArray1) - 1
                _MSSQL_AddRecord($sqlCon, $TableName_2, "'" & $TestArray1[$i] & "'")
        Next
        
        ; 关闭数据库连接
        _MSSQL_End($sqlCon)
EndFunc   ;==>Example_2
发表于 2013-10-20 00:47:35 | 显示全部楼层
回复 1# anypac

原函数已支持一次写入多个值,但是只支持数组。

花了点时间,作了个简化版的,无避免重复数据措施。
要写入多个值(支持单一值):
   1,以一维数组作为参数。如: $Values[4] = ['001', 'you', '007', 'me']
   2, 多个值以逗号分隔。如:$Values = "001,you,007,me"
  
我没测试,因为你只提供了原UDF的一个函数。。。。无完全测试条件!

Func _MSSQL_AddRecords($oConnectionObj, $sTable, $Values)
    If Not IsObj($oConnectionObj) Or @error Then  Return SetError(1, 0, 0)
        Local $str = "INSERT INTO " & $sTable & " VALUES('"
    If IsArray($Values) Then ; 要写入的值为一个数组;只支持一维数组
                If UBound($Values, 2) <> 0 Then Return SetError(3, 0, 0)
        For $i = 0 To UBound($Values)-1
                        $str &= StringReplace($Values[$i], "'", "''") & "'," ; 写入的值有单引号时,必须把它转化为两个单引号
                Next
                StringTrimRight($str, 1) ; 删掉最后一个逗号
                $str &= ");"
        Else
            $Values = StringReplace($Values, "'", "''")
                If StringInStr($Values, ',') Then ; 字符串有多个值,以逗号分隔
                        $Values = StringReplace($Values, ",", "','")
                EndIf
                $str &= $Values & "');"
        EndIf
    $oConnectionObj.execute($str)
    Return 1
EndFunc   ;==>_MSSQL_AddRecords
 楼主| 发表于 2013-10-20 00:59:13 | 显示全部楼层
谢谢你的帮助,我的问题是这个过程本来就支持一次写入多个数据,问题是他只支持单列多数据或者单数据的入库,不支持单行数据的输入,能不能修改一下让他支持单行输入呢?谢谢
 楼主| 发表于 2013-10-20 08:46:06 | 显示全部楼层
本帖最后由 anypac 于 2013-10-20 08:59 编辑

今天早上看了另一个mssql的udf,参照了user3000大大的方法,自己改了一下,请高手们看看有没有什么漏洞,谢谢了,可以插入一行数据,不过要自定义好列的名字和对应的数据,本人初学,不懂得怎么判断过滤“*”和$srow=“”的情况,所以如果定义了多个列,然后$values是数组的话可能会出现错误~而且这个改动过的过程不支持$values是多维数组
Func _MSSQL_AddRecords($oConnectionObj, $sTable, $sRow, $Values)
        If Not IsObj($oConnectionObj) Or @error Then  Return SetError(1, 0, 0)        
        Local $str = "INSERT INTO " & $sTable & " (" & $Row & ") VALUES('"
        If IsArray($Values) Then ; 要写入的值为一个数组;只支持一维数组
                If UBound($Values, 2) <> 0 Then Return SetError(3, 0, 0)
                For $i = 0 To UBound($Values)-1
                        $str &= StringReplace($Values[$i], "'", "''") & "'," ; 写入的值有单引号时,必须把它转化为两个单引号
                Next
                StringTrimRight($str, 1) ; 删掉最后一个逗号
                $str &= ");"
                Else
                        $Values = StringReplace($Values, "'", "''")
                        If StringInStr($Values, ',') Then ; 字符串有多个值,以逗号分隔
                        $Values = StringReplace($Values, ",", "','")
                EndIf
                $str &= $Values & "');"
        EndIf
        $oConnectionObj.execute($str)
    Return 1
EndFunc   ;==>_MSSQL_AddRecords
 楼主| 发表于 2013-10-20 16:21:35 | 显示全部楼层
没有大哥来完善一下吗?坐等啊坐等
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 06:47 , Processed in 0.078769 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表