Sub GestionImpressionCarnet(Optional p_s_refOF As Variant, Optional p_s_refRadeau As Variant) Dim l_s_mess As String 
Dim l_s_sql As String 
Dim l_re As New adodb.Recordset 
Dim l_i_Carnet As Integer 
Dim l_i_boucle As Integer 
Dim l_b_ret As Boolean 
Dim l_i_ret As Integer On Error GoTo GestionImpressionCarnet_err l_s_sql = "SELECT * FROM T_RADEAUX WHERE " 
If (Not IsMissing(p_s_refRadeau)) Then 
l_s_sql = l_s_sql & "C_NumRadeaux=" & TextSQL(p_s_refRadeau) & " " 
Else 
l_s_sql = l_s_sql & "C_NumOFPliage=" & TextSQL(p_s_refOF) & " AND C_Carnet <2 " 
l_s_sql = l_s_sql & "ORDER BY C_IdOrdre " 
End If 
l_re.Open l_s_sql, g_db_new, adOpenDynamic, adLockPessimistic If l_re.EOF Then MsgBox "Il n'y a pas de radeaux dont le carnet doit re imprim End If Do While Not l_re.EOF l_i_Carnet = l_re!C_Carnet 
For l_i_boucle = (l_i_Carnet Mod 2) To 1 
l_s_mess = "Impression du carnet " 
If (l_i_boucle Mod 2) = 0 Then 
l_s_mess = l_s_mess & "rouge" 
Else 
l_s_mess = l_s_mess & "bleu" 
End If 
l_s_mess = l_s_mess & " du radeau " & l_re!C_NumRadeaux & vbCrLf & vbCrLf l_i_ret = MsgBox(l_s_mess, vbOKCancel, "Impression") If (l_i_ret = vbCancel) Then Exit Do 
End If l_b_ret = ImprimerCarnet(l_re!C_NumRadeaux) If (l_b_ret = True) Then l_re!C_Carnet = l_re!C_Carnet + 1 
l_re.Update 
Else Exit Do 
End If 
Next 
l_re.MoveNext 
Loop l_re.Close 
Exit Sub '---------------------- SORTIE EN ERREUR --------------------- 
GestionImpressionCarnet_err: 
MsgBox Error$ 
Exit Sub 
Resume 
End Sub 
'------------ 
TextSQL方法 
Public Function TextSQL(ByVal p_s_text As String) As String 
Dim l_i_pos As Integer 
'Commence par doubler les 関entuels guillemets pr閟ents dans la cha颓e 
l_i_pos = 1 
Do 
l_i_pos = InStr(l_i_pos, p_s_text, "'") 
If l_i_pos = 0 Then 
Exit Do 
End If 
p_s_text = Left$(p_s_text, l_i_pos) & "'" & Mid$(p_s_text, l_i_pos + 1) 
l_i_pos = l_i_pos + 2 
Loop 
TextSQL = "'" + p_s_text + "'" 
End Function

解决方案 »

  1.   

    查询数据库,楼主直接用c#来写就行了,不用"参照"vb的查询数据库方法.
      

  2.   

    一个VB.NET与C#代码在线互转的网站 
    http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx 
      

  3.   


             public string TextSQL(string p_s_text )
            {
            int l_i_pos; 
            l_i_pos = 1;
            Do 
                l_i_pos=string.CompareOrdinal(p_s_text,0,"'",l_i_pos );
                if (l_i_pos = 0)
                {
                        Exit Do ;
                }
            p_s_text = Left(p_s_text, l_i_pos) + "'" + Mid(p_s_text, l_i_pos + 1) ;
            l_i_pos = l_i_pos + 2 ;
            Loop 
            TextSQL = "'" + p_s_text + "'" ;
            }
      

  4.   

    C# 中没有变体(Variant)的声明
      

  5.   

            private void GestionImpressionCarnet(string p_s_refOF,string p_s_refRadeau ) 
            {
                string l_s_mess ;
                string l_s_sql ; 
                l_re = new  adodb.Recordset;//不对 
                string l_i_Carnet ;
                string l_i_boucle;
                string l_b_ret ;
                string l_i_ret ;
                try
                {
                    
                    l_s_sql = "SELECT * FROM T_RADEAUX WHERE " ;
                    if (! IsMissing(p_s_refRadeau))//IsMissing不对
                    {
                        l_s_sql = l_s_sql + "C_NumRadeaux=" + TextSQL(p_s_refRadeau) + " " ;
                    }
                    else 
                    {
                        l_s_sql = l_s_sql + "C_NumOFPliage=" + TextSQL(p_s_refOF) + " AND C_Carnet <2 " ;
                        l_s_sql = l_s_sql + "ORDER BY C_IdOrdre " ;
                    }
                    l_re.Open l_s_sql, g_db_new, adOpenDynamic, adLockPessimistic ;//数据库操作改了
                    if (l_re.EOF)//记录最后一条的判断也变了 
                    {
                        MessageBox.Show("Il n'y a pas de radeaux dont le carnet doit re imprim ");
                    }            }catch(exception ex)
                {
                    MessageBox.Show(ex);
                    Exit;
                }
            }
    先帮你改这些吧,实在是费劲。
      

  6.   

    Public Function TextSQL(ByVal p_s_text As String) As String 
    Dim l_i_pos As Integer 
    l_i_pos = 1 
    Do 
    l_i_pos = InStr(l_i_pos, p_s_text, "'") 这里InStr函数 里面"'" 这是什么意思啊。。这个函数就和C#里的IndexOf()一样,可是不知道这个"'" 是什么意思
      

  7.   

    Variant 声明我也知道C#里面没有但是用string代替是肯定不行的。可以尝试用
    public interface CarnetVar {
    public <type> GetData();
    }
    and
    private void GestionImpressionCarnet(CarnetVar toto);但是我不知道具体怎么做。
      

  8.   

    现在难点就是楼上2层说的2个问题和 For l_i_boucle = (l_i_Carnet Mod 2) To 1 
      这个不懂是什么意思。谁讲解下,谢谢了
      

  9.   

     InStr(l_i_pos, p_s_text, "'") 
     
     这个的意思就是: 在p_s_text字符串中从第l_i_pos位开始找“'“的索引。
      

  10.   

    Sub GestionImpressionCarnet(Optional p_s_refOF As Variant, Optional p_s_refRadeau As Variant) 这个方法 用C# 怎么写出啊。
    public interface CarnetVar { 
    public <type> GetData(); 

    and 
    private void GestionImpressionCarnet(CarnetVar toto); 用接口这个可以吗但是我不会啊。