哪位可以提供一个postgresql+ .net的例子
用存储过程的

解决方案 »

  1.   

    你可以去pgfound的网站上看
    已经有人写了.net的访问接口,应该带例子的
      

  2.   

    http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
    using System;
    using System.Data;
    using Npgsql;public class NpgsqlUserManual
    {
      public static void Main(String[] args)
      {
        NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=joe;Password=secret;Database=joedata;");
        conn.Open();
        conn.Close();
      }
    }
      

  3.   

    private string PolesCorrection(XmlDocument xmldoc) 
    {
    string xmlResult = String.Empty;
    string strSQL = String.Empty;
    string _operate = String.Empty; XmlNode dicNode = xmldoc.SelectSingleNode("//dic");
    string _tableName = dicNode.Attributes["tablename"].Value;
    string _pkey = dicNode.Attributes["pkey"].Value;
    string _user_id = dicNode.Attributes["_user_id"].Value.Trim();
    string _pkeyValue; string _projectId="none";
    if( dicNode.Attributes["projectId"]!=null) _projectId = dicNode.Attributes["projectId"].Value.Trim(); XmlNode itemNode = null;
    // XmlNode columnNode = null; itemNode =dicNode.ChildNodes.Item(0);
    string _pkeyValueBegin = itemNode.Attributes[_pkey].Value;   //获取纠正起始点点号 itemNode =dicNode.ChildNodes.Item(dicNode.ChildNodes.Count-1);
    string _pkeyValueEnd = itemNode.Attributes[_pkey].Value;     //获取纠正终止点号
    int operateIndex =0;
    for(int i=1; i< dicNode.ChildNodes.Count-1; i++)              //中间点分别纠正
    {
    itemNode = dicNode.ChildNodes.Item(i);
    string tmpSql = "";
    if(itemNode != null && itemNode.Name == "item") 
    {
    if(i>1)
    {
    operateIndex =1;
    }
    _pkeyValue = itemNode.Attributes[_pkey].Value;   //获取ID的值
    tmpSql +="select _correctionpoles("+ _pkeyValueBegin +","+ _pkeyValueEnd +","+ _pkeyValue +",'"+ _user_id +"',"+ operateIndex +","+ _pkeyValueBegin +","+ _pkeyValueEnd +");";
    }
    strSQL = strSQL + tmpSql;
    } strSQL = "BEGIN; " + strSQL + " END;";

    NpgsqlConnection conn = PostgreSqlClient.OpenConnection();
    // NpgsqlTransaction trans = conn.BeginTransaction();
    try 
    {

    NpgsqlCommand cmd = conn.CreateCommand();
    // cmd.Transaction = trans;
    cmd.CommandText = strSQL;
    // string resultOfMakeLine ="";
    /*
    NpgsqlDataReader myReader = cmd.ExecuteReader();
    if(myReader.HasRows)
    {
    do
    {
    resultOfMakeLine = myReader["_correctionpoles"].ToString();
    if(resultOfMakeLine =="error")
    {
    // trans.Rollback();
    xmlResult ="杆塔距基线太远!请重新选择!"; //返回
    break;
    }
    while (myReader.Read())

    resultOfMakeLine = myReader["_correctionpoles"].ToString();
    if(resultOfMakeLine =="error")
    {
    // trans.Rollback();
    xmlResult ="杆塔距基线太远!请重新选择!"; //返回
    break;
    }
    }while(myReader.NextResult());
    }*/
    cmd.ExecuteNonQuery();
    xmlResult = "success";

    }
    catch (Exception ex) 
    {
    xmlResult = ex.Message.ToString();
    if(xmlResult.ToUpper().IndexOf("ERROR") == -1) 
    {
    xmlResult = "ERROR:" + xmlResult;
    }
    }
    finally 
    {
    conn.Close();
    } return xmlResult;
    }
    #endregion
    刚写的给你
      

  4.   

    多谢上面几位热心帮助
    可我问的是用存储过程,(传参数,调用存储过程)而不是传 SQL语句给POSTGRES
      

  5.   

    try:
    NpgsqlConnection conn = new NpgsqlConnection(connString);
    NpgsqlCommand updateCmd = new NpgsqlCommand(
               "myStoredProcedure(@id1, @id2
              , @money_param)", conn);updateCmd.CommandType = CommandType.StoredProcedure;
    updateCmd.Parameters.Add("@id1", NpgsqlTypes.NpgsqlDbType.Integer);
    updateCmd.Parameters.Add("@id2", NpgsqlTypes.NpgsqlDbType.Integer);
    updateCmd.Parameters.Add("@money_param", NpgsqlTypes.NpgsqlDbType.Money);updateCmd.Parameters["@id1"].Value = 1;
    updateCmd.Parameters["@id_typu"].Value = 7;
    updateCmd.Parameters["@wartosc_cennika"].Value = decimal.Parse(textBox1.Text);updateCmd.ExecuteNonQuery();     //here occures exception
    //or updateCmdExecuteReader();conn.Close();