2011-02-07 1 views
0

У меня есть этот код, который работает ... Я прочитал из базы данных MS SQL несколько строк из таблицы, а затем отправлю электронное письмо для каждой строки.lotuscript: некоторые вопросы о подключении к SQL DB

Я собираюсь добавить поле «вложения» в базу данных SQL, и я хотел бы добавить вложение в конце своего тела.

У меня есть два вопроса: 1) какой тип данных следует использовать на MS SQL? (Возможно, двоичное поле) и 2) если у кого-то есть какой-то пример кода, я бы очень признателен.

Бонусный вопрос: в более продвинутой версии этого сценария я сначала запускаю все мои результаты из моего набора результатов, чтобы получить идентификаторы из сообщений, а затем обновить их статус в таблице MS SQL. Затем я попытаюсь снова запустить тот же набор результатов, чтобы фактически выполнить отправку .... Как-то во втором прогоне у меня возникают проблемы, начиная с строки 1, используя тот же код, что и ниже ... любые советы на что это лучший способ сделать это ?: Мое требование состоит в том, что я должен дважды запускать тот же набор результатов. :)

Заранее спасибо.

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 

ответ

0

Не было ли это линия:

result.NextRowcode 

должен быть:

result.NextRow 

?

Я не знаю о MSSQL, но в DB2 мы обычно используем двоичный тип данных Blob/Clob для хранения любых типов файлов.
Я слышал, что многие эксперты MSSQL рекомендуют хранить файлы в файловой системе только с указанием их пути и имени файла в БД.

+0

Спасибо за сообщение. Код + код был опечаткой. Я только что исправил это. – frenetix

+0

Привет, спасибо за ваш ответ. + NextRowcode был опечаткой, просто исправил его :). Что касается хранения файлов в файловой системе, дело в том, что у меня есть некоторые ограничения: сервер Notes не может получить доступ к какой-либо другой файловой системе, кроме локальной файловой системы, а приложение, которое генерирует сообщения, не имеет доступа к файловой системе Notes Server. Я думаю, мне придется хранить файлы на эквиваленте MS SQL Blobl/Clob - я считаю, что он называется двоичным типом - и молюсь, чтобы я мог правильно его прочитать из заметок. У меня были некоторые проблемы в прошлом, с некоторыми типами данных - , Спасибо, в любом случае! – frenetix

+1

@frenetix Вы думаете о способе управления файлами в MsSql из Lotus? Я думаю, вам придется либо использовать «ADODB.Stream» из LotusScript, либо использовать [Java-агент] (http://www.coderanch.com/t/463785/JDBC/java/store-image-MS-SQL-Server). Если бы мне пришлось это сделать, я бы использовал Java. –

0

ОК, вот сокращенный код из моего Java ScriptLibrary, который использует JDBC для подключения к DB2 и выполнить запрос (вам нужно будет только импортировать децибел банку-ы и использовать com.microsoft.sqlserver.jdbc.SQLServerDriver для 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; 
    } 
} 

чтобы проверить примеры использования LS2J использовать классы Java непосредственно из вашего кода LotusScript, скачать большую базу данных образцов LS2J от Julian Робишо:
http://www.nsftools.com/tips/NotesTips.htm#ls2jexamples

А вот хорошая ссылка, чтобы начать с, объясняет, как использовать JDBC с MS SQL se rver:
http://support.microsoft.com/kb/313100