lotuscript:关于连接到sqldb的一些问题

lotuscript:关于连接到sqldb的一些问题,sql,odbc,lotusscript,Sql,Odbc,Lotusscript,我有这个代码正在工作。。。我从MS SQL数据库中读取表中的一些行,然后为每一行发送电子邮件 我要在我的SQL数据库上添加一个附件字段,我想在我的正文末尾添加附件 我有两个问题:1我应该在MS SQL上使用什么数据类型?二进制字段,如果其他人有一些示例代码,我会非常感激 一个额外的问题:在这个脚本的更高级版本中,我首先运行resultset中的所有结果,从消息中获取ID,然后更新它们在MS SQL表中的状态。 然后我再次尝试使用相同的结果集运行,以实际执行发送。。。。 不知怎的,在第二次运行时,

我有这个代码正在工作。。。我从MS SQL数据库中读取表中的一些行,然后为每一行发送电子邮件

我要在我的SQL数据库上添加一个附件字段,我想在我的正文末尾添加附件

我有两个问题:1我应该在MS SQL上使用什么数据类型?二进制字段,如果其他人有一些示例代码,我会非常感激

一个额外的问题:在这个脚本的更高级版本中,我首先运行resultset中的所有结果,从消息中获取ID,然后更新它们在MS SQL表中的状态。 然后我再次尝试使用相同的结果集运行,以实际执行发送。。。。 不知怎的,在第二次运行时,我从第1行开始时遇到了问题,使用了与bellow相同的代码。。。你有什么建议吗?:我的要求是我必须以相同的结果运行两次集:

提前谢谢

    Option Public 
    Uselsx "*LSXODBC"

    Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim subject As String, cc As String, bcc As String, sender As String, OID As String, mailto As String, bodyNotMIME As String
    Dim body As NotesMIMEEntity


    On Error Goto errorCounter

    Set db = session.CurrentDatabase

    Gosub SendMailGeneral

    Exit Sub

    SendMailGeneral:
    Dim con As New ODBCConnection
    Dim qry As New ODBCQuery
    Dim result As New ODBCResultSet
    Dim defaultQuery As String
    Set qry.Connection = con    
    con.SilentMode = True
    If con.ConnectTo("DSN_Name","USER_NAME", "PASSWORD") Then
        Set result.Query = qry
        defaultQuery = "select TOP (10)  * from Message  where StatusType=0"
        qry.SQL = defaultQuery      
            result.Execute
            If (result.IsResultSetAvailable) Then
                Do


  result.NextRow

                Gosub GetRowFields

                Gosub SendMail

            Loop Until result.IsEndOfData
        End If
        End If
        result.Close(DB_CLOSE)  
        Return
        End Sub


    GetRowFields:
        mailto = result.GetValue("To")
        cc = result.GetValue("CC")
        bcc = result.GetValue("Bcc")
        sender = result.GetValue("Sender")
        subject = result.GetValue("Subject")
        bodyNotMIME = result.GetValue("Body")               
        OID = result.GetValue("OID")

        Return


    SendMail:
            Dim mail As NotesDocument
            Set mail = New NotesDocument(db)
            Dim stream As NotesStream
        Set stream = session.CreateStream

    'Recipients 
        mail.SendTo = mailto
        mail.CopyTo = cc
        mail.BlindCopyTo = bcc

    ' Set all sender-related fields 
        mail.ReplyTo = sender
        mail.Principal = sender
        mail.From = sender
        mail.AltFrom = sender
        mail.SendFrom = sender
        mail.INetFrom = sender
        mail.tmpDisplaySentBy = sender
        mail.tmpDisplayFrom_Preview = sender
        mail.DisplaySent = sender 

    'Body   

        Call stream.WriteText(bodyNotMIME)
        Set body = mail.CreateMIMEEntity
        Call body.SetContentFromText _
        (stream, "text/html; charser=iso-8859-1", ENC_NONE)

    'Subject    
        mail.Subject = subject

    'Send

        Call mail.Send(False, False)

        Return
这句话是不是:

result.NextRowcode
应该是:

result.NextRow
?

我不知道MSSQL,但在DB2中,我们通常使用Blob/Clob二进制数据类型来存储任何类型的文件。
我听说很多MSSQL专家建议在文件系统中存储文件时,在数据库中只使用路径和文件名。

好,以下是我的Java脚本库中的缩写代码,它使用JDBC连接到DB2并执行查询,您只需导入数据库的jar-s并使用com.microsoft.sqlserver.JDBC.SQLServerDriver for MS SQL即可:

import java.sql.*;
import com.ibm.db2.jcc.DB2Driver;

public class DB2Connection {
    protected String server;
    protected String port;
    protected String dbName;
    protected String userdb2;
    protected String pwddb2;
    protected java.sql.Connection con;


    public DB2Connection( String srv, String port, String db, String user, String pass ){
        this.server = srv;
        this.port = port;
        this.dbName = db;
        this.userdb2 = user;
        this.pwddb2 = pass;

        connectDB2();
    }


    public void connectDB2() {
        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver"); // .newInstance();
            String url = "jdbc:db2://" + server + ":" + port + "/" + dbName;
            con = DriverManager.getConnection(url, userdb2, pwddb2);
            System.out.println("Connection to DB2 succeded");

        } catch (Exception e) {
            System.out.println("Error connecting DB2 Server") ;
            e.printStackTrace();
        }
    }

    protected ResultSet executeQuery( String queryString ) throws SQLException, Exception {
        System.out.println( "Preparing query:\t" + queryString );
        ResultSet rs = null;
        try {
            Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(queryString);

        } catch (SQLException sqle) {
            String error = ("SQLException : Could not execute query");
            throw new SQLException(error);
        } catch (Exception e) {
            String error1 = ("Exception : An Unknown error occurred.");
            throw new Exception(error1);
        }
        return rs;
    }

    protected int executeCountQuery( StringBuffer queryStr ){
        System.out.println( "Preparing query:\t" + queryStr );
        try {
            ResultSet rs = executeQuery( queryStr.toString( ) );
            rs.next();  //only one row in result set
            return rs.getInt(1);

        } catch (SQLException sqle) {
            System.out.println("SQLException: Could not get ResultSet from DB2Connection.executeQuery");
            sqle.printStackTrace();
        } catch (Exception e) {
            System.out.println("Exception : An Unknown error occurred while calling.");
            e.printStackTrace();
        }
        return 0;
    }

    protected int executeCountQuery( PreparedStatement ps ){
        //System.out.println( "Preparing prepared statement - query:\t" );  //+ ps.getQuery( ) );
        try {
            ResultSet rs = ps.executeQuery( );
            rs.next();  //only one row in result set
            return rs.getInt(1);

        } catch (SQLException sqle) {
            System.out.println("SQLException: Could not get ResultSet from DB2Connection.executeQuery");
            sqle.printStackTrace();
        } catch (Exception e) {
            System.out.println("Exception : An Unknown error occurred while calling.");
            e.printStackTrace();
        }
        return 0;
    }


    public Connection getConnection(){
        return con;
    }
}
要查看直接从LotusScript代码中使用LS2J使用Java类的示例,请从Julian Robichaux下载这个很棒的LS2J示例数据库:

这里有一个很好的链接,介绍了如何将JDBC与MS SQL server结合使用:

谢谢你的帖子。+代码是一个输入错误。我刚修好。嗨,谢谢你的回复。+NextRowcode是一个输入错误,刚刚修复了它:。关于在文件系统上存储文件,我有一些限制:Notes服务器不能访问其本地文件系统以外的任何其他文件系统,并且生成消息的应用程序不能访问Notes服务器的文件系统。我想我必须将文件存储在MS SQL Blobl/Clob等价物上——我相信它被称为二进制类型——祈祷我能从笔记中正确地阅读它——我过去遇到过一些问题,有些数据类型-。无论如何谢谢你@frenetix是否考虑过一种从Lotus操作MsSql文件的方法?我认为您必须使用LotusScript中的ADODB.Stream或使用。如果我必须这样做,我会使用Java。这听起来有点可怕:谢谢ADODB.Stream提示,我会尝试阅读一些东西。关于使用Java代理:以前从未做过,我所有的Notes编码都是在LotusScript上进行的,我将尝试一下。谢谢我最近做了一些Java代理,当时我必须连接到DB2,在JavaApplet中提取一些数据并创建图形。在这里,您可以从LotusScript代码中直接找到有关如何使用Java类的信息: