Hejsan jag har följt artiklen som pelle har skrivit om att skapa ett databaslager i en dll fil. Det går alldeles utmärkt att skapa en i VB men jag vill jobba i C# helst. Och jag får massa felmeddelande när jag kompilerar den kod pelle har skrivit. jag jobbar i visual.studio 2005. Koden innehåller massor med fel... Ser ut att vara VB.NET-kod med lite klamrar och ;...? Ska försöka mig på att rätta första metoden, hoppas att jag inte har missat någt. Har en gammalt lager till mysql, byt ut alla odbc mot sql så funka nog koden nedan om du inte orkar fixa felen... Detta borde fungera. Du måste dock lägga till referenserna System.Web och System.Configuration för att koden skall fungera i C# och Visual Studio 2005. hejsan ja nu fungerar det, tror jag ;) Antingen behöver du ta bort DataFunctions och bara skriva : Hej,  Hmm jag trodde funktionerna under System.Data.SqlClient bara fungerade mot Microsoft SQL-server, men så är det tydligen inte? Nej det fungerar nog inte, jag använde mig av MySql.Data.MySqlClient.MySqlDataReaderskapa databaslager
    
    
här är min kod
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public class SQLFunctions
{
    static string GetConnectionString()
    {
        if (InStr(HttpContext.Current.Request.Url.ToString.ToLower, "localhost") > 0)
        {
            GetConnectionString = ConfigurationSettings.AppSettings("ConnectionStringLocal");
        }
        else
        {
            GetConnectionString = ConfigurationSettings.AppSettings("ConnectionString");
        }
    }
    static DataSet ReturnDataset(string query)
    {
        SqlConnection conn = new SqlConnection(GetConnectionString);
        SqlDataAdapter adapter = new SqlDataAdapter();
        DataSet dataset = new DataSet();
        try
        {
            adapter.SelectCommand = new SqlCommand(query, conn);
            adapter.Fill(dataset);
        }
        catch (SystemException ex)
        {
            throw new ApplicationException("SQL: Kan inte köra frågan:" + Err.Description + query);
        }
        return dataset;
    }
    public static SqlDataReader ReturnDataReader(string sqlquery)
    {
        SqlConnection myConnection = new SqlConnection(GetConnectionString);
        SqlCommand myCommand = new SqlCommand(sqlquery, myConnection);
        myCommand.CommandType = CommandType.Text;
        try
        {
            myConnection.Open();
            SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            return result;
        }
        catch (DataException ex)
        {
            throw new SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" + Err.Description);
        }
        myCommand = null;
        myConnection = null;
    }
    static void ExecuteQuery(string sqlquery)
    {
        string connectionstring = GetConnectionString();
        SqlConnection Con = new SqlConnection(connectionstring);
        SqlCommand cmd;
        Con.Open();
        cmd = new SqlCommand(sqlquery, Con);
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" + Err.Description);
        }
        Con.Close();
    }
}
Här är felmeddelanden
Error	1	The name 'InStr' does not exist in the current contextError
	2	'object.ToString()' is a 'method', which is not valid in the given context
Error	4	'System.Configuration.ConfigurationSettings.AppSettings' is a 'property' but is used like a 'method'	
Error	6	'System.Configuration.ConfigurationSettings.AppSettings' is a 'property' but is used like a 'method'		
Error	7	The best overloaded method match for 'System.Data.SqlClient.SqlConnection.SqlConnection(string)' has some invalid arguments	
Error	8	Argument '1': cannot convert from 'method group' to 'string'	
Error	9	The type or namespace name 'SystemException' could not be found (are you missing a using directive or an assembly reference?)	
Error	10	The type or namespace name 'ApplicationException' could not be found (are you missing a using directive or an assembly reference?)		
Error	11	The name 'Err' does not exist in the current context	
Error	12	The best overloaded method match for 'System.Data.SqlClient.SqlConnection.SqlConnection(string)' has some invalid arguments		
Error	13	Argument '1': cannot convert from 'method group' to 'string'	Error	14	The type or namespace name 'SystemException' could not be found (are you missing a using directive or an assembly reference?)	
Error	15	The name 'Err' does not exist in the current context	
Error	16	The type or namespace name 'Exception' could not be found (are you missing a using directive or an assembly reference?)
Error	17	The type or namespace name 'SystemException' could not be found (are you missing a using directive or an assembly reference?)	
Error	18	The name 'Err' does not exist in the current context	Sv: skapa databaslager
    
    
    static string GetConnectionString()
    {
        if (HttpContext.Current.Request.Url.ToString().ToLower().IndexOf("localhost") > 0)
        {
            return ConfigurationSettings.AppSettings["ConnectionStringLocal"];
        }
        else
        {
            return ConfigurationSettings.AppSettings["ConnectionString"];
        }
    }
/Johan
    Sv: skapa databaslager
    
    
<code>
public class MysqlDataAccess : IDataAccess
    {
        // Definitions
        string _strConnection = "DRIVER={MySQL ODBC 3.51 Driver};" +
                                "SERVER=localhost;" +
                                "DATABASE=****;" +
                                "UID=****;" +
                                "PASSWORD=****;" +
                                "OPTION=3";
                    
        private OdbcConnection _objConn;
        private OdbcDataReader _objDataReader;
        private OdbcCommand _cmdSql;
        private ArrayList _parameterCollection;
        public MysqlDataAccess()
        {
            _objConn = new OdbcConnection(_strConnection);
            _cmdSql = new OdbcCommand();
            _parameterCollection = new ArrayList();
        }
        private void CreateCommand(string sqlStatement)
        {
            _cmdSql.CommandText = sqlStatement;
            _cmdSql.Connection = _objConn;
            foreach (OdbcParameter prm in _parameterCollection)
            {
                _cmdSql.Parameters.Add(prm);
            }
        }
        public void CreateParameter(string parameterName, DbType dataType, object parameterValue)
        {
            OdbcParameter tmp = new OdbcParameter();
            tmp.Value = parameterValue;
            _parameterCollection.Add(tmp);
            //_parameterCollection.Add(new OdbcParameter().Value = parameterValue);
        }
        public void ClearParameters()
        {
            _parameterCollection.Clear();
            _cmdSql.Parameters.Clear();
        }
        public DataSet GetDataSet()
        {
            throw new NotImplementedException();
        }
        public DataTable GetDataTable()
        {
            throw new NotImplementedException();
        }
        public IDataReader GetDataReader(string sqlStatement)
        {
            try
            {
                _objConn.Open();
                CreateCommand(sqlStatement);
                _objDataReader = _cmdSql.ExecuteReader(CommandBehavior.CloseConnection);
              
                return _objDataReader;
            }
            catch (Exception)
            {
                throw new Exception("Opps!");
            }
            finally
            {
            }
        }
        public void RunNonQuery(string sqlStatement)
        {
            RunNonQuery(sqlStatement, false);
        }
        public object GetScalar(string sqlStatement)
        {
            try
            {
                if (_objConn.State == ConnectionState.Closed)
                {
                    _objConn.Open();
                }
                CreateCommand(sqlStatement);
                return _cmdSql.ExecuteScalar();
            }
            catch (Exception)
            {
                throw new Exception("Opps!");
            }
            finally
            {
                _objConn.Close();
            }
        }
        public void RunNonQuery(string sqlStatement, bool leaveConnectionOpen)
        {
            try
            {
                if (_objConn.State == ConnectionState.Closed)
                {
                    _objConn.Open();
                }
                CreateCommand(sqlStatement);
                _cmdSql.ExecuteNonQuery();
            }
            catch (Exception)
            {
                throw new Exception("Opps!");
            }
            finally
            {
                if (!leaveConnectionOpen)
                {
                    _objConn.Close();
                }
            }
        }
        
    }
}
</code>Sv: skapa databaslager
    
    
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public class SQLFunctions
{
    static string GetConnectionString()
    {
        if (System.Web.HttpContext.Current.Request.Url.ToString().ToLower().IndexOf("localhost") > 0)
            return ConfigurationManager.AppSettings["ConnectionStringLocal"].ToString();
        else
            return ConfigurationManager.AppSettings["ConnectionString"].ToString();
    }
    static DataSet ReturnDataset(string query)
    {
        SqlConnection conn = new SqlConnection(GetConnectionString());
        SqlDataAdapter adapter = new SqlDataAdapter();
        DataSet dataset = new DataSet();
        try
        {
            adapter.SelectCommand = new SqlCommand(query, conn);
            adapter.Fill(dataset);
        }
        catch (System.SystemException ex)
        {
            throw new System.ApplicationException("SQL: Kan inte köra frågan:" + query + "-" + ex.ToString());
        }
        return dataset;
    }
    public static SqlDataReader ReturnDataReader(string sqlquery)
    {
        SqlConnection myConnection = new SqlConnection(GetConnectionString());
        SqlCommand myCommand = new SqlCommand(sqlquery, myConnection);
        myCommand.CommandType = CommandType.Text;
        try
        {
            myConnection.Open();
            SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            return result;
        }
        catch (DataException ex)
        {
            throw new System.SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" + ex.ToString());
        }
        finally
        {
            myCommand = null;
            myConnection = null;
        }
    }
    static void ExecuteQuery(string sqlquery)
    {
        string connectionstring = GetConnectionString();
        SqlConnection Con = new SqlConnection(connectionstring);
        SqlCommand cmd;
        Con.Open();
        cmd = new SqlCommand(sqlquery, Con);
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (System.Exception ex)
        {
            throw new System.SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" +  ex.ToString());
        }
        Con.Close();
    }
}
    Sv: skapa databaslager
    
    
Men när ja senare ska kalla på datafuncitons från min asp.net sida så kan den inte hitta den. Jag har addat referencen till dll filen som jag skapat men det fungerar fortfarande inte. Självklart så fungerar det om jag kör i med VB ;).
Kod
private void Page_Load(object sender, System.EventArgs e)  
{
      System.Data.SqlClient.SqlDataReader dr = DataFunctions.SQLFunctions.ReturnDataReader("select * from users limit 5");
    dr.Close();
    
}
Felemedelande
Error	2	The name 'DataFunctions' does not exist in the current contextSv:skapa databaslager
    
    
      System.Data.SqlClient.SqlDataReader dr = SQLFunctions.ReturnDataReader("select * from users limit 5");
eller får du lägga klassen i ett namespace som heter DataFunctions :
namespace DataFunctions
{
    // Lägg klassen här...
}
Sedan tror jag inte "select * from users limit 5" är giltigt syntax på en SQL-server. Skriv i stället :
select top 5 * from users
    Sv: skapa databaslager
    
    
Japp var tvungen att ta bort DataFunctions. SQL strängen ser ut som den gör för att det är en mySQL databas. 
Pelle borde se över sin C# kod i sin artikel om databaslager.  Annars är den kanon ;)
Tack för hjälpen
mvh
RobinSv:skapa databaslager
    
    Sv: skapa databaslager
    
    
mvh
Robin