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