Войти

Показать полную графическую версию : ASP: Все вопросы


Страниц : 1 2 [3] 4

Lihonosov
28-11-2007, 16:43
Я взял пример с realcoding.net :


<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %> //На этой строке выдает описанную выше ошибку
<%@ Import Namespace="System.Text"%>
<html>
<script language="C#" runat="server">
SQLConnection myConnection;
protected void Page_Load(Object Src, EventArgs E )
{
myConnection = new SQLConnection
("server=localhost;uid=sa;pwd=;database=pubs");
if (!IsPostBack)
BindGrid();

}
public void AddAuthor_Click(Object sender, EventArgs E)
{
if (au_id.Value == "" || au_fname.Value == "" ||
au_lname.Value == "" || phone.Value == "")
{
Message.InnerHtml = "ОШИБКА: Пустое значение не допустимо для полей
Author ID, Name или Phone";
Message.Style["color"] = "red";
BindGrid();
return;
}

String insertCmd = "insert into Authors values
(@Id, @LName, @FName, @Phone, @Address, @City,
@State, @Zip, @Contract)";
SQLCommand myCommand = new SQLCommand(insertCmd,
myConnection);
myCommand.Parameters.Add(new SQLParameter("@Id",
SQLDataType.VarChar, 11));
myCommand.Parameters["@Id"].Value = au_id.Value;
myCommand.Parameters.Add(new SQLParameter("@LName",
SQLDataType.VarChar, 40));
myCommand.Parameters["@LName"].Value = au_lname.Value;
myCommand.Parameters.Add(new SQLParameter("@FName",
SQLDataType.VarChar, 20));
myCommand.Parameters["@FName"].Value = au_fname.Value;
myCommand.Parameters.Add(new SQLParameter("@Phone",
SQLDataType.Char, 12));
myCommand.Parameters["@Phone"].Value = phone.Value;
myCommand.Parameters.Add(new SQLParameter("@Address",
SQLDataType.VarChar, 40));
myCommand.Parameters["@Address"].Value = address.Value;
myCommand.Parameters.Add(new SQLParameter("@City",
SQLDataType.VarChar, 20));
myCommand.Parameters["@City"].Value = city.Value;
myCommand.Parameters.Add(new SQLParameter("@State",
SQLDataType.Char, 2));
myCommand.Parameters["@State"].Value = state.Value;
myCommand.Parameters.Add(new SQLParameter("@Zip",
SQLDataType.Char, 5));
myCommand.Parameters["@Zip"].Value = zip.Value;
myCommand.Parameters.Add(new SQLParameter("@Contract",
SQLDataType.VarChar,1));
myCommand.Parameters["@Contract"].Value = contract.Value;

SQLConnection myConnection = new SQLConnection
("server=localhost;uid=sa;pwd=;database=pubs");
SQLCommand myCommand = new SQLCommand(insertCmd.ToString(),
myConnection);
myCommand.ActiveConnection.Open();

try
{
int rowsAffected = 0;
myCommand.Execute(ref rowsAffected);
Message.InnerHtml = "<b>Record Added</b><br>" +
insertCmd.ToString();
}
catch (SQLException e)
{
if (e.Number == 2627)
Message.InnerHtml = "ОШИБКА: Запись с таким первичным
ключом уже существует ";
else
Message.InnerHtml = "ОШИБКА: Невозможно добавить запись,
пожалуйста, убедитесь, что поля правильно заполнены";
Message.Style["color"] = "red";
}
myCommand.ActiveConnection.Close();

BindGrid();
}

public void BindGrid()
{

SQLConnection myConnection = new SQLConnection
("server=localhost;uid=sa;pwd=;database=pubs");

SQLDataSetCommand myCommand = new SQLDataSetCommand("select
* from Authors", myConnection);

DataSet ds = new DataSet();
myCommand.FillDataSet(ds, "Authors");

MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();
}
</script>

<body style="font: 10pt verdana">

<form runat="server">
<h3><font face="Verdana">Inserting a Row of Data</font></h3>

<table width="95%">
<tr>
<td valign="top">

<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
MaintainState="false"
/>
</td>
<td valign="top">

<table style="font: 8pt verdana">
<tr>
<td colspan="2" bgcolor="#aaaadd" style="font:10pt
verdana">Add a New Author:</td>
</tr>
<tr>
<td nowrap>Author ID: </td>
<td><input type="text" id="au_id" value="000-00-0000"
runat="server"></td>
</tr>
<tr>
<td nowrap>Last Name: </td>
<td><input type="text" id="au_lname" value="Doe"
runat="server"></td>
</tr>
<tr nowrap>
<td>First Name: </td>
<td><input type="text" id="au_fname" value="John"
runat="server"></td>
</tr>
<tr>
<td>Phone: </td>
<td><input type="text" id="phone" value="808 555-5555"
runat="server"></td>
</tr>
<tr>
<td>Address: </td>
<td><input type="text" id="address" value="One
Microsoft Way" runat="server"></td>
</tr>
<tr>
<td>City: <td>
<td><input type="text" id="city" value="Redmond"
runat="server"></td>
</tr>
<tr>
<td>State: </td>
<td>
<select id="state" runat="server">
<option>CA</option>
<option>IN</option>
<option>KS</option>
<option>MD</option>
<option>MI</option>
<option>OR</option>
<option>TN</option>
<option>UT</option>
</select>
</td>
</tr>
<tr>
<td nowrap>Zip Code: </td>
<td><input type="text" id="zip" value="98005"
runat="server"></td>
</tr>
<tr>
<td>Contract:</td>
<td>
<select id="contract" runat="server">
<option value="0">False</option>
<option value="1">True</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td style="padding-top:15">
<input type="submit" OnServerClick="AddAuthor_Click"
value="Add Author" runat="server">
</td>
</tr>
<tr>
<td colspan="2" style="padding-top:15" align="center">
<span id="Message" MaintainState="false"
style="font: arial 11pt;" runat="server"/>
</td>
</tr>
</table>

</td>
</tr>
</table>

</form>

</body>
</html>


Пробовал переделать код на работу с OleDb

System.Data.SQL => System.Data.OleDB
SQLConnection =>OleDbConnection
...
Пишу дома, а интернет на работе
MSDN дома нет, и посмотреть аналоги немогу
Например, на одном из примеров застрял на SQLExecuteQuery - какой аналог этой функции в OleDb?

Нужно написать модуль для редактирования и добавления в базе данных!

Есть примеры, но они для работы с MSSQL! Поэтому и решил поставить MSSQL.

vadimiron
28-11-2007, 17:13
Оформляйте код пожалуйста тегами форума

Попробуйте вот этот код для считавыния из Access-a


string ConnectionString="Строка подсоединения";
string strSQL = "SELECT * FROM [Имя Таблицы]";
OleDbConnection DBConnection = new OleDbConnection(ConnectionString);

try
{
DBConnection.Open();

OleDbCommand cmd = new OleDbCommand(strSQL, DBConnection );

//Execute SELECT
OleDbDataReader dr = cmd.ExecuteReader();


//Get Rows
while (dr.Read())
{
string output=dr["Имя Столбца"].ToString();
Console.WriteLine(output);
}

dr.Close();

}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}

Lihonosov
28-11-2007, 17:29
Оформляйте код пожалуйста тегами форума »
ОК!
На другом форуме прочитал такое:
Может базу Access правльно настроить? насколько помню там есть возможность выбора прав при подключении (в настройках - "владелец" или "пользователь").
А вы можете что-то добавить?

vadimiron
28-11-2007, 17:36
Lihonosov,
Честно говоря, не знаю. База к которой я подключаюсь, не мной ведётся. Мне просто дали пароль и Логин и показали, где она лежит.

Для тестов я создавал для себя сам базу. Без всяких паролей и тд. Попробуйте тоже так. Создайте новую Access-базу. Там одну таблицу с парой столбцов и парой записей. И попробуйте поконектиться к ней

Lihonosov
28-11-2007, 17:43
Для тестов я создавал для себя сам базу. Без всяких паролей и тд. Попробуйте тоже так. Создайте новую Access-базу. Там одну таблицу с парой столбцов и парой записей. И попробуйте поконектиться к ней »
Я разобрался как получать данные и выводить их, например в DataGrid. С поиском и последущим выводом тоже. Теперь нужно добавлять и удалять записи, тут застрял!

А еще вопрос, мне хотелось бы чтобы когда, пользователь ввел слово поиска и ему вывелись результаты в DataGridе, то искомое слово было везде выделено другим цветом!
Может знаете как это реализовать? Ссылка или пример?

vadimiron
28-11-2007, 18:49
Посмотрите здесь (http://aspnet.4guysfromrolla.com/articles/072402-1.aspx) - вроде то. (Я сам не пробывал)

Lihonosov
29-11-2007, 11:48
<%@ Import Namespace="System.Data.SQL" %>
Заменил везде в тексте SQL на Sql и ошибок с этим больше нет, но на другом застрял.

Решил все переделать на работу с Access.

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Text"%>
<html> <script language="C#" runat="server">
OleDbConnection myConnection;
protected void Page_Load(Object Src, EventArgs E )
{ string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source="+MapPath("pubs.mdb");
OleDbConnection myConnection=new OleDbConnection(strConnection);
if (!IsPostBack) BindGrid(); }
public void AddAuthor_Click(Object sender, EventArgs E) {
if (au_id.Value == "" || au_fname.Value == "" || au_lname.Value == "" || phone.Value == "") {
Message.InnerHtml = "ОШИБКА: Пустое значение не допустимо для полей Author ID, Name или Phone";
Message.Style["color"] = "red"; BindGrid(); return; }

String insertCmd = "insert into Authors values (@Id, @LName, @FName, @Phone, @Address, @City,@State, @Zip, @Contract)";
OleDbCommand myCommand = new OleDbCommand(insertCmd,myConnection); myCommand.Parameters.Add(new OleDbParameter("@Id",OleDbType.VarChar, 11)); myCommand.Parameters["@Id"].Value = au_id.Value;
myCommand.Parameters.Add(new OleDbParameter("@LName",OleDbType.VarChar, 40)); myCommand.Parameters["@LName"].Value = au_lname.Value; myCommand.Parameters.Add(new OleDbParameter("@FName",OleDbType.VarChar, 20)); myCommand.Parameters["@FName"].Value = au_fname.Value; myCommand.Parameters.Add(new OleDbParameter("@Phone", OleDbType.Char, 12)); myCommand.Parameters["@Phone"].Value = phone.Value;
myCommand.Parameters.Add(new OleDbParameter("@Address",OleDbType.VarChar, 40)); myCommand.Parameters["@Address"].Value = address.Value; myCommand.Parameters.Add(new OleDbParameter("@City",OleDbType.VarChar, 20)); myCommand.Parameters["@City"].Value = city.Value;
myCommand.Parameters.Add(new OleDbParameter("@State",OleDbType.Char, 2)); myCommand.Parameters["@State"].Value = state.Value;
myCommand.Parameters.Add(new OleDbParameter("@Zip",OleDbType.Char, 5)); myCommand.Parameters["@Zip"].Value = zip.Value;
myCommand.Parameters.Add(new OleDbParameter("@Contract",OleDbType.VarChar,1)); myCommand.Parameters["@Contract"].Value = contract.Value;
string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source="+MapPath("pubs.mdb");
OleDbConnection myConnection2=new OleDbConnection(strConnection);
OleDbCommand myCommand2 = new OleDbCommand(insertCmd.ToString(), myConnection2); myCommand2.Connection.Open();
try {
myCommand2.ExecuteReader();
Message.InnerHtml = "<b>Record Added</b><br>" + insertCmd.ToString(); } catch(OleDbException e) {
if (e.ErrorCode == 2627)
Message.InnerHtml = "ОШИБКА: Запись с таким первичным ключом уже существует "; else
Message.InnerHtml = "ОШИБКА: Невозможно добавить запись,пожалуйста, убедитесь, что поля правильно заполнены";
Message.Style["color"] = "red"; }
myCommand2.Connection.Close();
BindGrid(); }
public void BindGrid()
{ string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=" + MapPath("pubs.mdb");
OleDbConnection myConnection=new OleDbConnection(strConnection);
OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors"); MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind(); }
</script>
<body style="font: 10pt verdana"> <form runat="server"> <h3><font face="Verdana">Inserting a Row of Data</font></h3> <table width="95%"> <tr> <td valign="top"> <ASP:DataGrid id="MyDataGrid" runat="server" Width="700" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding=3 CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" MaintainState="false" /> </td> <td valign="top"> <table style="font: 8pt verdana"> <tr> <td colspan="2" bgcolor="#aaaadd" style="font:10pt verdana">Add a New Author:</td> </tr> <tr> <td nowrap>Author ID: </td> <td style="width: 158px"><input type="text" id="au_id" value="000-00-0000" runat="server"></td> </tr> <tr> <td nowrap>Last Name: </td> <td style="width: 158px"><input type="text" id="au_lname" value="Doe" runat="server"></td> </tr> <tr nowrap> <td>First Name: </td> <td style="width: 158px"><input type="text" id="au_fname" value="John" runat="server"></td> </tr> <tr> <td>Phone: </td> <td style="width: 158px"><input type="text" id="phone" value="808 555-5555" runat="server"></td> </tr> <tr> <td>Address: </td> <td style="width: 158px"><input type="text" id="address" value="One Microsoft Way" runat="server"></td> </tr> <tr> <td>City: </td> <td style="width: 158px"><input type="text" id="city" value="Redmond" runat="server"></td> </tr> <tr> <td>State: </td> <td style="width: 158px"> <select id="state" runat="server"> <option>CA</option> <option>IN</option> <option>KS</option> <option>MD</option> <option>MI</option> <option>OR</option> <option>TN</option> <option>UT</option> </select> </td> </tr> <tr> <td nowrap>Zip Code: </td> <td style="width: 158px"><input type="text" id="zip" value="98005" runat="server"></td> </tr> <tr> <td style="height: 24px">Contract:</td> <td style="height: 24px; width: 158px;"> <select id="contract" runat="server"> <option value="0">False</option> <option value="1">True</option> </select> </td> </tr> <tr> <td></td> <td style="padding-top:15; width: 158px;"> <input type="submit" OnServerClick="AddAuthor_Click" value="Add Author" runat="server"> </td> </tr> <tr> <td colspan="2" style="padding-top:15" align="center"> <span id="Message" MaintainState="false" style="font: arial 11pt;" runat="server"/> </td> </tr> </table> </td> </tr> </table> </form> </body> </html>

Выдает ошибку после нажатия на кнопку (процедура public void AddAuthor_Click(Object sender, EventArgs E))
"ОШИБКА: Невозможно добавить запись,пожалуйста, убедитесь, что поля правильно заполнены";
Подскажите в чем моя ошибка.

vadimiron
29-11-2007, 21:17
Проблема в том, что та ошибка, которую вы указали - это совсем не та ошибка, которая по правде возникает
Читайте, что пишут сами Exceptions

То есть вместо...

if (e.ErrorCode == 2627)
Message.InnerHtml = "ОШИБКА: Запись с таким первичным ключом уже существует "; else
Message.InnerHtml = "ОШИБКА: Невозможно добавить запись,пожалуйста, убедитесь, что поля правильно заполнены";


....используйте лучше сообщение самого Exception

Message.InnerHtml=e.Message;


Таким образом, вы сможете суть ошибки быстрей понять. По крайней мере пока пишите и тестируете программу - Потом конечно, вы можете вывод ошибок для пользователя украсить, но во вряме разработки надо читать оригинальное сообщение

Lihonosov
30-11-2007, 10:56
У Вас есть пример кода для записи и изменения данных в Access? Буду очень благодарен!

Сейчас работаю над выделением искомых слов, как только сделаю, то могу выложить примери на C#, если нужно.

vadimiron
02-12-2007, 17:33
Lihonosov,
Начните с самого простого (без использования параметров)

string strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\\mcTest.MDB";
string strSQL = "INSERT INTO Developer(Name, Address ) VALUES('NewName', 'NewAddress')" ;
// create Objects of ADOConnection and ADOCommand
OleDbConnection myConn = new OleDbConnection(strDSN);
OleDbCommand myCmd = new OleDbCommand( strSQL, myConn );
try
{
myConn.Open();
myCmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine("Error: \n{0}", e.Message);
}
finally
{
myConn.Close();
}



Примерно такое проходит?? Получается записать данные?

Lihonosov
03-12-2007, 09:52
myCmd.ExecuteNonQuery(); »
Сегодня вечером проверю, но раньше в других примерах везде, где была ExecuteNonQuery() у меня на ней вылетала ошибка, что мол ExecuteNonQuery() не определена (точно не помню точного описания ошибки, как попробую напишу если вылетит).
Какое пространство имен нужно включать, чтобы ее использовать, достаточно ли System.Data и System.Data.OleDb?

И еще:
На стартовой странице у меня текстовое поле (<asp:TextBox>) и Выпадающий список (<asp:DropDownList>). В выпадающий список при открытии страницы заносятся значения из базы данных в текстовое поле ключевое слово для поиска. А также кнопка "НАЙТИ" (<asp:Button> со свойством PostBackUrl), после нажатия которой производится переход на другую страницу в которую должны передаться два значения: значение текстового поля и значения выбранного в выпадающем списке.
Как организовать передачу значений?

С текстовый полем делаю:

MyTextBox=(TextBox)Page.PrevivousPage.FindControl("MyTextBoxOnPrePage");
(точно код не помню, т.к. пишу по памяти)

Но после этого ничего в текстовом поле не появляется!
И где правильно производить такие операции (в каком участке кода)?

Lihonosov
05-12-2007, 12:23
С передачей сделал так:

"..../default.aspx?text1=из_текстБокса&text2=из_допдаунЛиста"

На той страничке на которую редиректимся на PageLoad:
string str1=Request.QueryString["text1"]!=null?Request.QueryString["text1"].ToString():"";
string str2=Request.QueryString["text2"]!=null?Request.QueryString["text2"].ToString():"";

Теперь хочу сделать такое:

Когда пользователь наводит мышку на строку в DataGrid:
1. Строка меняла фоновый цвет
2. Если пользователь задержал курсор над ней более трех секунда, то выплыла бы всплывающая подсказка, которая брала бы данные из базы данных.
Подскажите!

vadimiron
05-12-2007, 12:50
к 1: Посмотрите здесь (http://aspnet.4guysfromrolla.com/articles/021605-1.aspx) или здесь (http://www.netomatix.com/development/GridViewRowHighlight.aspx)
к 2: здесь без AJAX-а не обойтись. Я вам советую сначало поискать уже чтото готовое. В инете можно найти готовые DataGrid c большим количеством разных функций. Может чтото подойдёт...

Lihonosov
05-12-2007, 15:26
к 1: Посмотрите здесь или здесь »
Спасибо получилось! :-)

Lihonosov
06-12-2007, 12:23
Есть на страничке три RadioButton от выбора которых зависит формирование свойства PostBackUrl кнопка "НАЙТИ"
Например,

Если выбран первый RadioButton, то PostBackUrl="SearcArticle.aspx?text1="+myTextbox.Text;
Если выбран второй RadioButton, то PostBackUrl="SearcBook.aspx?text1="+myTextbox.Text;
Если выбран третий RadioButton, то PostBackUrl="ХОЧУ ЧТОБЫ значение myTextbox.Text передавалось в поиск www.google.com.ua" - (1)

В свойствах всех RadioButton определил OnRadioButton_checked и поставил AutoPostBack=true чтобы значение PostBackUrl изменялось при изменении выбора RadioButton.
И по умолчанию первый установил в CHECKED=true, а также PostBackUrl="SearcArticle.aspx?text1="+myTextbox.Text;

Но если выбрать сначала значение RadioButton, а потом написать что-нибудь в текстовом поле, и нажать кнопку "НАЙТИ"? то значение из текстового поля в PostBackUrl соответственно не попадет! - (2)

Может все можно сделать проще: возможно ли так: В свойствах Button определить параметр OnClicked в реализации функции которой проверялось состояние всех RadioButton, TextBox и формировалась PostBackUrl, после сформирования которой был произведен переход на значение сформированного PostBackUrl. Т.е. как можно совметить OnClicked и PostBackUrl? (3)

Постарался как можно подробнее объяснить суть :-)

Server
27-04-2008, 22:22
Ребята, не кидайте помидорами, если подобное уже обсуждалось. Просто никак не могу разрулить грабли на которые наступил.

Есть такой код:

<form id="Form1" runat = server>
<asp:ListBox ID = "JudgesList" runat = server Height = "250px" Width = "100%" SelectionMode = "Multiple" OnSelectedIndexChanged="JudgesList_SelectedIndexChanged" AutoPostBack="True"/>
</form>


И соответственно обработчик:

<script runat="server">
protected void JudgesList_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("XXXXXX");
}
</script>


Проблема в том, что событие не наступает. Не могу его отловить. В процессе загрузки страницы в ListBox добавляются Item'ы. Пытаюсь ставить брейк на этом событии, а оно не наступает. Почему???

Смысл в том, чтобы по клику выводить в Label - количество выделенных строк.

Заранее благодарен всем, кто откликнется.

Костэн
02-05-2008, 00:26
Народ, подскажите откуда можно скачать Microsoft Visual Studio 2005-2007. Две тысячи восьмая говорят жрёт два гига оперативы, а это не подходит к возможностям моего компьютера

vadimiron
02-05-2008, 02:38
Народ, подскажите откуда можно скачать Microsoft Visual Studio 2005-2007 »
ссылка (http://www.microsoft.com/germany/express/legacy/default.aspx) правда на немецком, но ссылки на скачивание вроде понятны

Костэн
02-05-2008, 12:35
vadimiron, я уточнил, что именно мне необходимо. Microsoft Visual Studio BETA 2 или более поздняя версия SPECIALITY FOR C# или .NET
Такие есть в интеренете ?

Костэн
04-05-2008, 18:24
Что моя просьба завела в тупик знатаков ?

vadimiron, а тоже самой страницы, но на английском нет ? Мне кажется, что на немецком не только ссылки, и программа...




© OSzone.net 2001-2012