Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: BaluBig
Дата сообщения: 15.11.2007 09:40
minos14
Таки да, массив (cорри, я опечатался ). Ведь, с учетом вложенных, контролов с заданным именем может быть несколько...
Автор: bandyn
Дата сообщения: 16.11.2007 09:58
Подскажите есть-ли какой-нибудь компонент для доступа к БД DBF (Clipper), желательно чтобы работал с индексами NTX
Автор: Lihonosov
Дата сообщения: 16.11.2007 10:23

Цитата:
Примера нету, могу расписать последовательность действий. Ищешь в базе (предполагаю SQLServer либо другую СУБД) обычным SQL запросом с выражением LIKE %SearchString% по нужному полю + встроенным классами SqlCommand SqlConnection DataReader, затем полученную выборку прилепляешь к нужному контролу с помощью свойства DataSource, запускаешь DataBind(). Большинство контейнеров имеют такое свойство (ComboBox, ListBox, GridView, etc). С деталями, думаю, разберешься. Есть еще способы использования DataSet-ов, но с ними не работал, хотя говорят, что с ними побыстрее будет программить.

Спасибо!
А может подскажешь:
Я связал GridView c аксесовской базой. Реализовал "LIKE %SearchString% по нужному полю", т.е. строка запроса передается в класс где создается соединение, но никак не могу обновить содержимое грида после передачи запроса! Может помнишь какой-нибудь элементарный пример (хотелось бы с SQLServer, т.к. с ним раньше не работал, хватало Access.mdb), чтобы ввести в текстовой поле строку запроса (поиск в одной таблице по одному полю, например, чтобы передавала "SELECT Order FROM Table WHERE Order LIKE '%SearchString%'"), нажать кнопку найти и после этого результат появился в каком-нидудь гриде.
Или ссылку на пример в сети.
P.S. Пишу на С#
Автор: Cosmo_vk
Дата сообщения: 17.11.2007 15:06
Lihonosov
Я делал так:

Код: private DataSet GetData()
{
// connSTR - строка подключения к базе.
SqlConnection myCon = new SqlConnection(connSTR);
SqlCommand selStr = new SqlCommand();
selStr.Connection = myCon;
selStr.CommandText = "Select * from YourTable";
SqlDataAdapter sqlAD2 = new SqlDataAdapter(selStr, myCon);
DataSet ds = new DataSet();
sqlAD2.Fill(ds);
return ds;

private void GridViewShow()
{
// берем данные из GetData
// gdwEvent - DataGridView
gdwEvent.DataSource = GetData();
gdwEvent.DataBind();
}
}
Автор: Lihonosov
Дата сообщения: 19.11.2007 08:44
Cosmo_vk
Спасибо.
Автор: Lihonosov
Дата сообщения: 23.11.2007 13:46
Установил IIS на Win2003
Для проверки положил файл в wwwroot с равширением *.aspx после запуска выдает ошибку:


Цитата:
The page cannot be displayed

You have attempted to execute a CGI, ISAPI, or other executable program from a directory that does not allow
programs to be executed.
________________________________________________________________ ___________

Please try the following:
* Contact the Web site administrator if you believe this directory should allow execute access.

HTTP Error 403.1 - Forbidden: Execute access is denied.
Internet Information Services (IIS)
________________________________________________________________ ___________

Technical Information (for support personnel)
* Go to Microsoft Product Support Services and perform a title search for the words HTTP and 403.
* Open IIS Help, which is accessible in IIS Manager (inetmgr), and search for topics titled Configuring ISAPI
Extensions, Configuring CGI Applications, Securing Your Site with Web Site Permissions, and About Custom Error
Messages.
* In the IIS Software Development Kit (SDK) or at the MSDN Online Library, search for topics titled Developing
ISAPI Extensions, ISAPI and CGI, and Debugging ISAPI Extensions and Filters.


Подскажите, что я забыл настроить или поставить, в чем ошибка?

Добавлено:
Может кто-нибуть написать пошаговые действия, чтобы заставить IIS запускать *.aspx файлы написанные на C# или VB.
Например:

Цитата:
1. Установить Винду
2. Установить IIS через Установка и удаление программ - компоненты ...
3.
...
И в результате вы видите на экране результат выволнения файла Sample.aspx
Автор: alt76
Дата сообщения: 23.11.2007 15:07
Lihonosov
а ты Microsoft.NET Framework ставил ?
если да, то тогда попробуй запустить из папки Framework (будет что-то тима "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\"
aspnet_regiis.exe /i
Автор: sdubovitsky
Дата сообщения: 25.11.2007 23:35
Lihonosov
а выполнение приложений в свойствах сайта разрешено?
Автор: Lihonosov
Дата сообщения: 26.11.2007 09:09
alt76
sdubovitsky

Цитата:
aspnet_regiis.exe /i

Сделал! Работает! Спасибо!!!

Добавлено:
Есть еще один вопрос:
У меня при открытии страницы заполняется dropdownlist из базы данных и сразу сортируется. Когда пишу в текстовом поле строку запроса, а в выпадающем списке выберают тему поиска, результат отображается ниже в гриде - все это получилось и работает, но есть одно НО после запроса в выпадающем списке не сохраняется результат выбора темы, а снова сортируется и отображается самый первый. Т.е. как сделать чтобы после выбора темы в выпадающем списке отображаласьта тема, которую я выбрал перед поиском?
Надеюсь вопрос понятен.
Автор: eLLoco
Дата сообщения: 26.11.2007 09:31
Если не ошибаюсь, речь идет об ASP.NET? Тогда вот кусок моего кода, смысл в том, что надо сохранять состояние контролов. Перекрываются методы страницы и заполняется событие OnInit:

Код:
protected void Page_Init(object sender, EventArgs e) {
    Page.RegisterRequiresControlState(this);
}
protected override object SaveControlState() {
    object[] ctlState = new object[8];
    ctlState[0] = base.SaveControlState();
    ctlState[1] = SearchString;
    ctlState[2] = SearchRubricId;
    ctlState[3] = StartRowIndex;
    ctlState[4] = PageSize;
    ctlState[5] = OrgCount;
    ctlState[6] = SortBy;
    ctlState[7] = EnableHighlighter;
    return ctlState;
}
protected override void LoadControlState(object savedState) {
    object[] ctlState = (object[])savedState;
    base.LoadControlState(ctlState[0]);
    SearchString = (string)ctlState[1];
    SearchRubricId = (int)ctlState[2];
    StartRowIndex = (int)ctlState[3];
    PageSize = (int)ctlState[4];
    OrgCount = (int)ctlState[5];
    SortBy = (OrganizationsProvider.OrganizationsSortBy)ctlState[6];
    EnableHighlighter = (bool)ctlState[7];
}
Автор: Lihonosov
Дата сообщения: 26.11.2007 10:03
Извеняюсь что много спрашиваю!
Я подключають к базе Access на ASP.NET. И если база открыта в MS Access, то при попытке запустить *.aspx страницу IIS выдает ошибку, мол немогу получить доступ к файлу так как он сейчас занят...

1. Будет ли такая ошибка когда несколько пользователей запустят страницу для просмотра базы и будут обращаться с запросами в нее?

2. И если например один пользователь в данным момент добавляет в базу новые данные с помощью aspx страниц, то смогут ли с базой работать остальные пользователи?

С MS SQL Server такого наверное небудет, но с ней никогда не работал и база уже есть в Access.
Автор: TeXpert
Дата сообщения: 26.11.2007 13:12
Lihonosov
Цитата:
С MS SQL Server такого наверное небудет, но с ней никогда не работал и база уже есть в Access
Но можно ведь и преобразовать?
Автор: Lihonosov
Дата сообщения: 26.11.2007 13:24

Цитата:
Но можно ведь и преобразовать?

Можно. А много ли кода прийдется переписывать или только строки подключения?
Автор: TeXpert
Дата сообщения: 26.11.2007 14:06
Lihonosov
Да вроде немного. Всё зависит, вообще-то, от логики, от базы. Глянь книгу Сеппы, там многое найдёшь.
Автор: BlackVetal
Дата сообщения: 27.11.2007 11:17
Lihonosov
Может базу Access правльно настроить? насколько помню там есть возможность выбора прав при подключении (в настройках - "владелец" или "пользователь").
Автор: Lihonosov
Дата сообщения: 28.11.2007 09:29

Цитата:
Может базу Access правльно настроить? насколько помню там есть возможность выбора прав при подключении (в настройках - "владелец" или "пользователь").

А по-подробнее. Если можно? В каких настройках?

Поставил MSSQL, но когда запукаю страницу, то сразу ошибка буквально на первой строчке Что-то вроде "Не найдено SQL в System.Data", может нужно как-то связать IIS and MSSQL, моежт что-то как aspnet_regiis.exe -i, там есть aspnet_regsql.exe, пробовал запусскать ее с различными параметрами, но ничего не получилось!
Подскажите, кто знает, как настроить MSSQL чтобы использовать в IIS!
Автор: Lihonosov
Дата сообщения: 29.11.2007 14:09
Заменил везде в тексте SQL на Sql и ошибок с этим больше нет, но на другом застрял.

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

Код:

Код: <%@ 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>
Автор: Cosmo_vk
Дата сообщения: 01.12.2007 07:57
Lihonosov
Вот в этом:
Код: 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);
Автор: BaluBig
Дата сообщения: 03.12.2007 10:56
Наступил на странные грабли при работе в нескольких доменах приложений. Никто не подскажет почему так происходит и что делать?
Имеется: VS, в ней солюшн и два проекта: Runner - компилится в приложение Windows Forms и TestAsm - компилится в dll. В обоих проектах по одной форме, на обоих формах по одному TextBox, у той, которая в Runner еще и кнопка.
Код в форме Runner:

Код:
namespace Runner
{
public partial class RunnerForm : Form
{
public RunnerForm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
AppDomain dom = AppDomain.CreateDomain("OtherDomain");
dom.Load(AssemblyName.GetAssemblyName("TestAssembly.dll"));
TestAssembly.AssemblyForm f =
(TestAssembly.AssemblyForm)dom.CreateInstanceFromAndUnwrap("TestAssembly.dll", "TestAssembly.AssemblyForm");
f.Show();
}
}
}
Автор: Lihonosov
Дата сообщения: 03.12.2007 15:03
На стартовой странице у меня текстовое поле (<asp:TextBox>) и Выпадающий список (<asp:DropDownList>). В выпадающий список при открытии страницы заносятся значения из базы данных в текстовое поле ключевое слово для поиска. А также кнопка "НАЙТИ" (<asp:Button> со свойством PostBackUrl), после нажатия которой производится переход на другую страницу в которую должны передаться два значения: значение текстового поля и значения выбранного в выпадающем списке.
Как организовать передачу значений?

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

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

Но после этого ничего в текстовом поле не появляется!
И где правильно производить такие операции (в каком участке кода)?
Автор: Solnake
Дата сообщения: 03.12.2007 16:13
Самый просто способо передача параметрами в строке.
Тоесть делаеш редирект на следующую страницу и добавляеш в конце строку типа
"..../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:"";

Вот и все. Суть я думаю ясна.
Автор: Lihonosov
Дата сообщения: 03.12.2007 17:13

Цитата:
Самый просто способо передача параметрами в строке.
Тоесть делаеш редирект на следующую страницу и добавляеш в конце строку типа
"..../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:"";

Вот и все. Суть я думаю ясна.

Спасибо! Буду пробовать!
Автор: sdubovitsky
Дата сообщения: 03.12.2007 23:33
BaluBig
AppDomain dom = AppDomain.CreateDomain("OtherDomain");
Assembly a = dom.Load(AssemblyName.GetAssemblyName("TestAssembly.dll"));
TestAssembly.AssemblyForm f = (TestAssembly.AssemblyForm)a.CreateInstance("TestAssembly.AssemblyForm");
f.Show();
Вот так работает нормально... Пытаюсь накопать что не так с твоим вариантом.

На мой взгляд в твоем варианте либо не нужно загружать сборку в домен, либо надо не у домена вызывать метод CreateInstanceAndUnwrap, а у сборки CreateInstance (собственно код выше).
Автор: BaluBig
Дата сообщения: 04.12.2007 09:42
sdubovitsky

Код:
Assembly asm = dom.Load(AssemblyName.GetAssemblyName("TestAssembly.dll"));
TestAssembly.AssemblyForm f =
(TestAssembly.AssemblyForm)asm.CreateInstance("TestAssembly.AssemblyForm", false);
Автор: sdubovitsky
Дата сообщения: 04.12.2007 13:32
BaluBig
Ступил. Да, форма поднимается в первом домене.

Кстати, если делать не Show, а ShowDialog - с русским будет все в порядке.
Автор: BaluBig
Дата сообщения: 04.12.2007 14:56
sdubovitsky

Цитата:
Кстати, если делать не Show, а ShowDialog - с русским будет все в порядке.

Знаю, я об этом писал в первом посте. К сожалению, это неприемлимо. Так что прийдется на потоках...
Автор: Lihonosov
Дата сообщения: 04.12.2007 21:52

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

Все получилось только немного так:
string str1=Request.QueryString["text1"]!=null?Request.QueryString["text1"].ToString():"";
Скобочки добавил

И проблемка: когда передается рсский шрифт, то на следующей странице получаются квадратики, что может быть?
Автор: Solnake
Дата сообщения: 05.12.2007 08:19
Lihonosov
Ну писал на скорую руку, завтыкал.
Насчет квадратиков - указывай кодировку когда читаеш параметр.
Не помню точно как, посмотри в MSDN как указать кодировку в ToString()
Автор: Lihonosov
Дата сообщения: 05.12.2007 09:20

Цитата:
Насчет квадратиков - указывай кодировку когда читаеш параметр.
Не помню точно как, посмотри в MSDN как указать кодировку в ToString()

ОК! Спасибо.

Добавлено:
А как будет правильнее:

"..../default.aspx?text1="+myTextBox.Text+"&text2="+myDropDownList.Text;

или

text1=myTextBox.Text;
text2=myDropDownList.Text;
"..../default.aspx?text1&text2";

Про правильность написанного незнаю, потому что сейчас проверить возможности нет, поэтому если кто знает прошу ответить про правильность написанного мной и если есть еще какие-нибудь варианты прошу написать.
Автор: Solnake
Дата сообщения: 05.12.2007 09:31
Lihonosov
Первый вариант правильный.
text1 - параметр, а содержимое myTextBox.Text - будет значение этого параметра.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.