2013-07-06 3 views
0

Я все еще новичок в ASP.net, и я учусь, как вызывать классы. Я просмотрел учебники, но не все они относятся к ASP.net 4.0, поэтому я не уверен, что я должен их применять.Класс вызова из кода позади

Прямо сейчас, я пытаюсь подключиться к моей базе данных SQL. Мой файл webconfig был настроен с помощью connectionstring «dbConnectionString» и работает правильно, когда я тестировал его с помощью GridView. Теперь я хотел бы получить доступ к базе данных из кода.

Я видел некоторые способы достичь этого, но я бы хотел, чтобы был наиболее эффективным, доступным способом. Я попытался принять ответ, указанный здесь: How to create sql connection with c# code behind, access the sql server then conditionally redirect? однако, я получаю сообщение об ошибке.

Я делаю это с C# как веб-сайт, а не веб-приложение. Вот мой код позади для Login.aspx.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using SqlComm; // Is this how I connect to my class from this page???? 


public partial class Login : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      //no code written yet 
     } 
    } 

} 

Мой класс в папке App_Code, имя файла SQLComm.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Data.SqlClient; 
using System.Web; 

/// <summary> 
/// SQL Query class 
/// </summary> 
public class SqlComm 
{ 
    // Connection string 
    static string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString; 

    // Execute sql command with no value to return 
    public static void SqlExecute(string sql) 
    { 
     using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      cmd.Connection.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
    } 

    // Execute SQL query and return a value 
    public static object SqlReturn(string sql) 
    { 
     using (SqlConnection conn = new SqlConnection(PjSql.dbcs())) 
     { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      object result = (object)cmd.ExecuteScalar(); 
      return result; 
     } 
    } 

    // Retrieve an entire table or part of it 
    public static DataTable SqlDataTable(string sql) 
    { 
     using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      cmd.Connection.Open(); 
      DataTable TempTable = new DataTable(); 
      TempTable.Load(cmd.ExecuteReader()); 
      return TempTable; 
     } 
    } 

    // Execute a stored procedure with 1 parameter 
    // Returning a value or just executing with no returns 
    public static object SqlStoredProcedure1Param(string StoredProcedure, string PrmName1, object Param1) 
    { 
     using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand(StoredProcedure, conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add(new SqlParameter(PrmName1, Param1.ToString())); 
      cmd.Connection.Open(); 
      object obj = new object(); 
      obj = cmd.ExecuteScalar(); 
      return obj; 
     } 
    } 
} 

Как вы можете видеть, я не написал ни код для фактического использования класса, но «использование SQLComm»; Сама линия дает мне эту ошибку:

Compiler Error Message: CS0246: The type or namespace name 'SqlComm' could not be found (are you missing a using directive or an assembly reference?) 

Как я еще новичок, я не уверен, куда идти отсюда. Кажется, я включил все, что содержалось в ответе на странице, с которой я связан выше. Что еще и я не хватает?

Edit: Я прочитал этот пост о подобной проблеме: asp.NET 2.0 Web Site Can't Access Classes in App_Code Может ли это быть потому, что я делаю веб-сайт, а не веб-приложения, так что папка App_Code обрабатывается по-другому, когда я FTP файлы снова?

+0

'using SqlComm;' не должно быть 'using SqlDataClient' ..? – MethodMan

+0

Возможно, вам нужно установить действие сборки для компиляции в файле .cs в папке App_Code. Кроме того, вы должны иметь доступ к классу и его методам напрямую. –

+0

@Tim Schmelter мне нужно сделать это для веб-сайта, я думал, что это только для веб-приложений?Я просмотрел инструкции о том, как это сделать в Visual Web Developer и, похоже, не имеет такой опции, когда я нажимаю правой кнопкой мыши файл – Cineno28

ответ

1

using SQLComm означает, что вы хотите использовать пространство именSqlComm, который не существует. Я думаю, что вы хотите (где-то в вашем коде):

DataTable dt = SqlComm.SqlDataTable(...) // call one of the static methods. 
+0

@ D Stanley Спасибо за помощь! Я пробовал эту строку: DataTable dt = new DataTable(); dt = SqlComm.SqlDataTable ("SELECT * FROM Users WHERE UserName = 'demo'"); и теперь я получаю сообщение об ошибке: «SqlComm не существует в текущем контексте» – Cineno28

+0

Убедитесь, что у вас есть ссылка на проект, в котором существует '' SqlComm'', если в другом проекте и завершают класс пространство имен, потому что это способ сделать это. – SimpleVar

+0

@Yorye Nathan Итак, это должно быть в пространстве имен? Из примечания Д. Стэнли я ​​подумал, что, поскольку это не было пространство имен, я мог бы назвать это напрямую? Я завернул его в пространство имен «SqlComm» и поместил «Использование SqlComm» обратно в код, но он все еще дает мне ошибку. Чтобы ответить на другой вопрос, да, это в том же проекте – Cineno28

1

Вы можете назвать это напрямую. только Учитывая ваш класс имеет статические методы, которые вы будете называть это так:

SqlComm.SqlReturn("select * from table"); 
+0

Спасибо за помощь! Я пробовал приведенную выше строку, возвращающуюся к объекту, и я все еще получаю сообщение об ошибке «CS0103: имя« SqlComm »не существует в текущем контексте» – Cineno28

0

Так что я считаю, что я понял это. У меня была папка App_Code в подкаталоге моего веб-сайта Aspx, а не в корневом каталоге сервера. Я переместил папку в корневую папку, и теперь она работает.

Мне было бы интересно услышать какие-либо ответы на мои изменения в моем оригинальном посте. Поскольку я делаю это как веб-сайт вместо веб-приложения, есть ли какие-либо другие проблемы, которые мне нужно учитывать при использовании классов, подобных этим или другим вопросам? Я огляделся, но не видел много различий.

Спасибо всем за помощь!